Mr_Progger 0 9 декабря, 2019 Опубликовано 9 декабря, 2019 · Жалоба Доброго дня. Имею плату на основе BF537. Режим загрузки стоит - 00 Execute from 16-bit external memory (bypass boot ROM), изменить режим загрузки нельзя. Сейчас пользуюсь ранее кем-то собранным u-boot. U-boot лежит по 0x20000000 адресу нулевой страницы и грузит мой ldr с первой страницы. Как прошить флеш я знаю. Решил создать свой загрузчик, который будет просто передавать управление стандартному загрузчику блекфина. asm("P0.H = HI(0xEF000008 );"); asm("P0.L = LO(0xEF000008 ) ;"); asm("R7.H = HI(0x20060000) ; "); asm("R7.L = LO(0x20060000) ;"); asm("JUMP (P0);"); Вопрос как собрать проект чтобы он начал выполняться из флеш памяти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 10 декабря, 2019 Опубликовано 10 декабря, 2019 · Жалоба 13 часов назад, Mr_Progger сказал: Вопрос как собрать проект чтобы он начал выполняться из флеш памяти? Начальный адрес работы программы задаётся в линкерном скрипте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mr_Progger 0 11 декабря, 2019 Опубликовано 11 декабря, 2019 (изменено) · Жалоба 23 часа назад, dxp сказал: Начальный адрес работы программы задаётся в линкерном скрипте. Добрый день. В настройках проекта (LDF Settings) я указал My program will start running from 0x20000000. В Load Boot mode - Flash/PROM, Intel hex, 16-bit Инициализацию памяти я не делаю. Выходной файл делаю в формате ldrи кладу его в начальный адрес флеша. MyLoader2000000.zip Изменено 11 декабря, 2019 пользователем Mr_Progger Добавил архив с проектом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба И? Не работает? Или что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mr_Progger 0 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба 1 минуту назад, dxp сказал: И? Не работает? Или что? Не работает ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба Процессор не начинает работу из флешь памяти? Или из неё читаются не те инструкции? Вы через эмулятор можете проследить, откуда он стартует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mr_Progger 0 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба Только что, dxp сказал: Процессор не начинает работу из флешь памяти? Или из неё читаются не те инструкции? Вы через эмулятор можете проследить, откуда он стартует? Я не могу посмотреть что происходит, я выключаю/включаю питание, jtag теряет свзяь с платой. Или как-то можно отладить загрузку с эмулятором? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба а вы сделайте ресет в отладчике - он должен встать стартовый адрес, по идее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mr_Progger 0 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба 4 минуты назад, dxp сказал: а вы сделайте ресет в отладчике - он должен встать стартовый адрес, по идее. Спасибо попробую. Мне кажется для того чтобы моя программа стартовала из флеша нужно как-то отредактировать LDF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 11 декабря, 2019 Опубликовано 11 декабря, 2019 · Жалоба Насколько помню, в фине всегда сначала стартует жёстко зашитый загрузчик, который производит анализ бутстрапных пинов, выбирает источник загрузки и производит собственно загрузку образа в память для выполнения. Как раз образ ldr и нужен для того, чтобы этот загрузчик правильно загрузил все секции в память (обнулил zero секции, скопировал инициализаторы в секции с инициализированными данными, скопировал код программы в память программ и т.д.). Но у вас ситуация немного другая - вам этот образ с секциями не нужен, т.к. вы хотите выполнять сразу программу из флеши. Поэтому во флешь нужно залить прямо сразу исполняемый код программы, а не образ (ldr) - если там будет образ, то его исполнение конечно закончится неудачей. Возможно, это у вас и происходит. И ещё нужно иметь в виду, что если вы сразу начинаете выполнять программу, то всю эту подготовительную работу (обнуление/инициализация переменных и т.д.) ваша программа должна уже будет делать сама, т.к. вшитый загрузчик это не сделал, а просто передал управление на выполнение из внешней памяти. Выполнение из внешней памяти вместо загрузки образа, имхо, не лучший вариант, он медленный и вышеуказанные накладные возникают. Я его ни разу не пробовал, поэтому детальнее подсказать не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться