AHTOXA 14 5 мая, 2020 Опубликовано 5 мая, 2020 · Жалоба Я думал, это очевидно: gcc :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 5 мая, 2020 Опубликовано 5 мая, 2020 · Жалоба 1 час назад, AHTOXA сказал: Я думал, это очевидно: gcc :) Ну, мало ли А кто-нибудь в курсе, новомодный ARM Compiler 6 с Keil-овским линкером в нормальных отношениях? Когда ставится опция -x assembler-with-cpp (галка Assemble by using ArmClang V6 в окне 'Asm' Keil-а), то, естественно, ARM-нотация стартапа идет лесом. Посему написал я стартап (не знаю, правильно ли - но по крайней мере срисовал с примеров + он еще не до конца написан, но...) и вижу до боли знакомое Цитата error: L6236E: No section matches selector - no section to be FIRST/LAST. При этом стартап пока что такой Спойлер .equ STACK_SIZE, 1024 .equ HEAP_SIZE, 0 .global __StackTop .global __StackLimit .global __HeapBase .global __HeapLimit .global __Vectors .global __Vectors_End .global __Vectors_Size .section .stack .balign 8 __StackLimit: .space STACK_SIZE .size __StackLimit, . - __StackLimit __StackTop: .size __StackTop, . - __StackTop .if HEAP_SIZE .section .heap .balign 8 __HeapBase: .space HEAP_SIZE .size __HeapBase, . - __HeapBase __HeapLimit: .size __HeapLimit, . - __HeapLimit .endif .section .RESET .balign 4 __Vectors: .word __initial_sp .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler .word WWDG_IRQHandler .word PVD_IRQHandler .word TAMPER_IRQHandler .word RTC_IRQHandler .word FLASH_IRQHandler .word RCC_IRQHandler .word EXTI0_IRQHandler .word EXTI1_IRQHandler .word EXTI2_IRQHandler .word EXTI3_IRQHandler .word EXTI4_IRQHandler .word DMA1_Channel1_IRQHandler .word DMA1_Channel2_IRQHandler .word DMA1_Channel3_IRQHandler .word DMA1_Channel4_IRQHandler .word DMA1_Channel5_IRQHandler .word DMA1_Channel6_IRQHandler .word DMA1_Channel7_IRQHandler .word ADC1_2_IRQHandler .word CAN1_TX_IRQHandler .word CAN1_RX0_IRQHandler .word CAN1_RX1_IRQHandler .word CAN1_SCE_IRQHandler .word EXTI9_5_IRQHandler .word TIM1_BRK_IRQHandler .word TIM1_UP_IRQHandler .word TIM1_TRG_COM_IRQHandler .word TIM1_CC_IRQHandler .word TIM2_IRQHandler .word TIM3_IRQHandler .word TIM4_IRQHandler .word I2C1_EV_IRQHandler .word I2C1_ER_IRQHandler .word I2C2_EV_IRQHandler .word I2C2_ER_IRQHandler .word SPI1_IRQHandler .word SPI2_IRQHandler .word USART1_IRQHandler .word USART2_IRQHandler .word USART3_IRQHandler .word EXTI15_10_IRQHandler .word RTCAlarm_IRQHandler .word OTG_FS_WKUP_IRQHandler .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word TIM5_IRQHandler .word SPI3_IRQHandler .word UART4_IRQHandler .word UART5_IRQHandler .word TIM6_IRQHandler .word TIM7_IRQHandler .word DMA2_Channel1_IRQHandler .word DMA2_Channel2_IRQHandler .word DMA2_Channel3_IRQHandler .word DMA2_Channel4_IRQHandler .word DMA2_Channel5_IRQHandler .word ETH_IRQHandler .word ETH_WKUP_IRQHandler .word CAN2_TX_IRQHandler .word CAN2_RX0_IRQHandler .word CAN2_RX1_IRQHandler .word CAN2_SCE_IRQHandler .word OTG_FS_IRQHandler __Vectors_End: .equ __Vectors_Size, __Vectors_End - __Vectors .size __Vectors, . - __Vectors .section .text .thumb .balign 4 .eabi_attribute Tag_ABI_align_preserved, 1 .fnstart .type Reset_Handler, "function" Reset_Handler: .global hw_WDTInit .global hw_SysClkInit ldr r0, =hw_WDTInit blx r0 ldr r0, =hw_SysClkInit blx r0 ldr r0, =__main bx r0 .end А файл скрипта компоновщика стандартный генерируемый средой Цитата ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00020000 { ; load region size_region ER_IROM1 0x08000000 0x00020000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x20000000 0x00010000 { ; RW data .ANY (+RW +ZI) } } Ну чего ему надо? Ведь я разместил таблицу векторов в секции RESET. А компоновщик, видимо, ее выбросил как ненужную. ЧЯДНТ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба А почему бы стартап вообще на С не использовать? Зачем там ассемблер? Там всего-то делов: void Reset_Handler() { if( __low_level_init() ) { memcpy(__data_start, __idata_start, __data_end - __data_start); // copy initialized variables memset(__bss_start, 0, __bss_end - __bss_start); // zero-fill uninitialized variables __libc_init_array(); // low-level init & ctor loop } main(); } https://github.com/emb-lib/arm-none-eabi-startup Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 5 часов назад, dxp сказал: А почему бы стартап вообще на С не использовать? Зачем там ассемблер? Можно, конечно, на Си. Я просто хотел по документу (мигнация с компилятора v5 на v6) переписать ассемблерный стартап. Но с наскоку не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба В 06.05.2020 в 12:31, Arlleex сказал: Я просто хотел по документу (мигнация с компилятора v5 на v6) переписать ассемблерный стартап. Но с наскоку не получилось. Стартап для компилятора v6 и заодно IAR и GCC в одном флаконе. И линкерскрипты для них. Для Keil обратить внимание на первую строчку скаттер-файла - она важна! Для IAR и GCC в принципе и стандартные скрипты подойдут. startup_iar_gcc_keil_stm32f072.c LinkerScripts.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 20 минут назад, VladislavS сказал: Стартап для компилятора v6 и заодно IAR и GCC в одном флаконе... Благодарю! Буду разбираться потихоньку. На текущий момент оставил это до лучших времен, а сам начал заниматься непосредственно прикладным ПО. Сейчас пока использую компилятор v6 (armclang) с опцией сборки .s-файлов как для v5 (armasm). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 13 августа, 2020 Опубликовано 13 августа, 2020 (изменено) · Жалоба struct _dev { u32 a; volatile u32 b; volatile u32 c[MAX_C_QNT]; u32 *d[MAX_D_QNT]; }Dev; __asm void func() { ...... ldr r3,[r1,#(__cpp(offsetof(Dev, d)))] } keil 5.23 Изменено 13 августа, 2020 пользователем romas2010 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться