M0HAX 0 28 ноября, 2014 Опубликовано 28 ноября, 2014 · Жалоба Имеется iar 7.20. Взял пример для Cortex LPC1549 из iar 7.30. Загрузил проект в iar 7.20. Отладчик J-Link ARM v8 (версия драйвера v4.94g). В проекте указал, что отладчиком явлется J-Link. При загрузке выдается предупреждение "--------------------------- Driver --------------------------- Warning: Stack pointer is setup to incorrect alignment. Stack addr = 0x030000B9 --------------------------- ОК ---------------------------" При этом подцеплен правильный icf-файл для LPC1549 /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x00000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x00000000; define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x02000000; define symbol __ICFEDIT_region_RAM_end__ = 0x02008FDF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x1000; define symbol __ICFEDIT_size_heap__ = 0x2000; /**** End of ICF editor section. ###ICF###*/ define symbol __CRP_start__ = 0x000002FC; define symbol __CRP_end__ = 0x000002FF; define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__] - mem:[from __CRP_start__ to __CRP_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region CRP_region = mem:[from __CRP_start__ to __CRP_end__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP }; place in CRP_region { section .crp }; Т.е. CSTACK находится в диапазоне адресов [0x02000000 - 0x02008FDF]. А при загрузке вдруг SP получает значение 0x030000B9, а диапазон адресов [0x03000000 - 0x03008000] принадлежит 32kB boot ROM согласно даташиту. Отладчик затем догружается, но указатель отладчика встает на некий адрес программы и стоит там, не реагируя на пошаговые инструкции. В чем может быть дело? До этого работал с АРМ7 и iar 5.41, там немного по-другому, а тут столкнулся с этой проблемой. FLASH проца до этого стирал с помощью отдельного запуска j-link. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 186 28 ноября, 2014 Опубликовано 28 ноября, 2014 · Жалоба В Cortex-ах при старте CPU, начальное значение SP загружается со смещения 0 таблицы векторов прерываний. Проверьте его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M0HAX 0 1 декабря, 2014 Опубликовано 1 декабря, 2014 (изменено) · Жалоба В Cortex-ах при старте CPU, начальное значение SP загружается со смещения 0 таблицы векторов прерываний. Проверьте его. да, в выходные в книжке про кортекс прочитал это. В исходном файле после elf-заголовка лежит нормальный адрес стека согласно map-файлу. Похоже, эмулятор грузит с ошибкой, выдает сообщение Verify error at address 0x00000000, target byte: 0x20, byte in file: 0xB8 и более 200 ошибок. пока не могу разобраться, в чем проблема:питание,кабель и т.д. Еще есть вопрос. Загрузил эмулятор программу. Открываю дизассемблер. Отправляюсь в том окне смотреть,что лежит по адресу 0x00000000. Вижу,что то значение,которое загрузилось в SP, лежит по адресу 0x00000004. Вот это мне непонятно. Ведь значение SP должно лежать по адресу 0x00000000. Меня интересует, что может лежать по адресу 0x00000000 и почему там не значение SP(пусть хоть на данный момент и неправильное), откуда взялось такое смещение Изменено 1 декабря, 2014 пользователем M0HAX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M0HAX 0 6 декабря, 2014 Опубликовано 6 декабря, 2014 (изменено) · Жалоба Получил новый комп, поставил Win7, iar7.20.2, последний segger-овский драйвер 4.94g к J-Link. Все заработало - грузится как надо. Изменено 6 декабря, 2014 пользователем M0HAX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться