swampman 0 5 июля, 2010 Опубликовано 5 июля, 2010 · Жалоба Здравствуйте. Использую FreeRTOS v6.0.4, проект uIP_Demo, среда IAR. При обычных настройках icf файла проект само собой работает. Бутлодер располагается в начале флешки, основная программа (на базе FreeRTOS) - со смещением 0x2000. В файле at91SAM7X256_FLASH.icf меняю: define symbol __ICFEDIT_intvec_start__ = 0x00100000; define symbol __ICFEDIT_region_ROM_start__ = 0x00100040; на define symbol __ICFEDIT_intvec_start__ = 0x00102000; define symbol __ICFEDIT_region_ROM_start__ = 0x00102040; после запуска шедуллера программа сваливается. Подозреваю что нужно подправить Cstartup.s, помогите разобраться где подправить. Заранее благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 июля, 2010 Опубликовано 5 июля, 2010 · Жалоба Падает после запуска шедулера, потому как на векторе SWI какая-нибудь ерунда торчит. Два варианта на выбор: 1. Обеспечить перенаправление SWI в bootloader'е и оставить его вектора 2. Сделать ремап и прописать свои вектора в основной программе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
swampman 0 6 июля, 2010 Опубликовано 6 июля, 2010 · Жалоба Действительно, улетал в никуда при вызове asm( "SWI 0" ). Правильно ли я понимаю, что при возникновении SWI процессор принудительно переходит на абсолютный адрес 0x8, вне зависимости от того, было ли в icf файле смещение DROMSTART или нет? Теперь пробую лечить это по первому варианту. В основной программе при переходе на вектор по адресу 0x08, в PC загружался адрес обработчика из ячейки со смещением +24. Соответственно в бутлодере пытаюсь прыгнуть на 0x2000 вперед (в сумме получается 8192+24 = 8216), написал для SWI: SWI_Handler_Entry: ldr pc , [pc, #+8216] после этого не компилится бутлодер, т.к выходит за пределы DROMEND А как обстоят дела с другими обработчиками (Reset, IRQ, FIQ), неужели тоже придется каждый раз прыгать за пределы бутлодера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 6 июля, 2010 Опубликовано 6 июля, 2010 · Жалоба ldr pc , [pc, #+8216] после этого не компилится бутлодер, т.к выходит за пределы DROMEND Ассемблеру глубоко фиолетово что там в pc в результате получается. А вот сколько бит для непосредственного значения предусмотрено в формате команды - это надо знать. Ну не влезает туда 8216, на что и должен ругаться и ругается Ассемблер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 11 февраля, 2014 Опубликовано 11 февраля, 2014 · Жалоба Падает после запуска шедулера, потому как на векторе SWI какая-нибудь ерунда торчит. Два варианта на выбор: 1. Обеспечить перенаправление SWI в bootloader'е и оставить его вектора 2. Сделать ремап и прописать свои вектора в основной программе А есть пример ? Прошу прощения за глупый вопрос. Такая же проблема. По отдельности работает (freertos c адреса 0x00100000). Бутлоадер тоже работает, с простыми приложениями (моргание лампочками, уарт, работа с датафлеш). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба ну кто-то же делал уже это? Тогда такой вопрос - корректно ли будет просто скопировать в память с адреса 00 всю прошивку из flash, а затем прыгнуть на адрес 00? (после ремапа, когда RAM доступна по адресу 00) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 16 марта, 2014 Опубликовано 16 марта, 2014 (изменено) · Жалоба Прерывания для FreeRTOS должны быть сконфигурированы как все preemptive, делайте это на старте. И не забывайте ремапить таблицу векторов на ваше смещение. Изменено 16 марта, 2014 пользователем kan35 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба И не забывайте ремапить таблицу векторов на ваше смещение. вот с этим и затык Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 1 апреля, 2014 Опубликовано 1 апреля, 2014 · Жалоба Тогда такой вопрос - корректно ли будет просто скопировать в память с адреса 00 всю прошивку из flash, а затем прыгнуть на адрес 00? (после ремапа, когда RAM доступна по адресу 00) Всю прошивку можно не копировать. Достаточно скопировать из основной программы (после ремапа) по адресу 0 "таблицу векторов". То есть, примерно вот такое: ; exception vectors exception_block_start ldr pc, Reset_Addr ldr pc, Undef_Addr ldr pc, SWI_Addr ldr pc, PAbt_Addr ldr pc, DAbt_Addr nop ldr pc, [pc, #-0xF20] ; go to by IRQ vector ldr pc, [pc, #-0xF20] ; go to by FIQ vector exception_vectors ; address map for exeption vectors Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler exception_block_end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 6 мая, 2014 Опубликовано 6 мая, 2014 · Жалоба Мне, получается, надо сначала заставить работать Free-RTOS cо сделанным ремапом? В функции AT91F_LowLevelInit поставил BOARD_RemapRam() из примеров board_memories.h Теперь надо как-то в файле линкера указать "копировать секцию векторов". В комплекте к uIP_Demo_IAR_ARM7 есть файлик только для работы из флеш. Может есть у кого уже готовый? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 6 мая, 2014 Опубликовано 6 мая, 2014 · Жалоба По-моему, проще скопировать "ручками" (самому написать небольшой кусочек кода), чем что-то указывать линкеру :) Сначала копируете, а потом уже remap. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 6 мая, 2014 Опубликовано 6 мая, 2014 (изменено) · Жалоба По-моему, проще скопировать "ручками" (самому написать небольшой кусочек кода), чем что-то указывать линкеру :) Сначала копируете, а потом уже remap. Благодарю! Скопировал из флеш в память тупо 0х80 байт (указав в настройках, что память начинается с 0х200080). Всё заработало. Затем поместил этот бинарник всё во флеш после загрузчика, всё работает. Еще раз огромное спасибо. Изменено 6 мая, 2014 пользователем TU-104 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться