Isaev_ivan 0 11 сентября, 2017 Опубликовано 11 сентября, 2017 · Жалоба Добрый день! Пишу в iar для arm. До этого писал на си, а сейчас захотелось более подробно узнать о работе ядра. Для этого решил создать ассемблерный проект и тут же появились ошибки. Ниже приведен листинг программы: asm.s: NAME example_project PUBLIC __vector_table PUBLIC __iar_program_start INCLUDE startup_stm32f303xc.s __iar_program_start B main SECTION .text : CODE (2) THUMB main NOP B main END Файл startup_stm32f303xc.s(немного укороченный): Stack_Size EQU 0x2000 SECTION SET_STACK:DATA:NOROOT(3) CSTACK DS32 Stack_Size __initializ_sp Heap_Size EQU 0x2000 SECTION SET_HEAP:DATA:NOROOT(3) HEAP DS32 Heap_Size __heap_limit DATA __vector_table DCD __initializ_sp DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler .... .... Файл я немного изменил по аналогии со стартап файлом кейла. В итоге появляются 2 предупреждения (скриншоты ниже). Вроде как не верная инициализация таблицы векторов и вершины стека. Добавление стартап файла iar порождает те же предупреждения. Кто-нибудь может подсказать в чем дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 11 сентября, 2017 Опубликовано 11 сентября, 2017 · Жалоба Чего-то вы велосипед изобретаете. IAR прекрасно генерит пустой проект для ASM Cortex-M. Добавить свои вектора прерываний и в путь. PUBLIC __iar_program_start PUBLIC __vector_table SECTION .text:CODE:REORDER(1) ;; Keep vector table even if it's not referenced REQUIRE __vector_table THUMB __iar_program_start main B main ;; Forward declaration of sections. SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) DATA __vector_table DCD sfe(CSTACK) DCD __iar_program_start DCD NMI_Handler DCD HardFault_Handler DCD MemManage_Handler DCD BusFault_Handler DCD UsageFault_Handler DCD 0 DCD 0 DCD 0 DCD 0 DCD SVC_Handler DCD DebugMon_Handler DCD 0 DCD PendSV_Handler DCD SysTick_Handler ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Default interrupt handlers. ;; PUBWEAK NMI_Handler PUBWEAK HardFault_Handler PUBWEAK MemManage_Handler PUBWEAK BusFault_Handler PUBWEAK UsageFault_Handler PUBWEAK SVC_Handler PUBWEAK DebugMon_Handler PUBWEAK PendSV_Handler PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) THUMB NMI_Handler HardFault_Handler MemManage_Handler BusFault_Handler UsageFault_Handler SVC_Handler DebugMon_Handler PendSV_Handler SysTick_Handler Default_Handler __default_handler CALL_GRAPH_ROOT __default_handler, "interrupt" NOCALL __default_handler B __default_handler END Стек отдайте на откуп линкеру. Файле $TOOLKIT_DIR$\CONFIG\generic_cortex.icf возьмите за основу и под себя поправьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться