Перейти к содержанию
    

1 час назад, AHTOXA сказал:

Я думал, это очевидно: gcc :)

Ну, мало ли:smile:

 

А кто-нибудь в курсе, новомодный 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.

А компоновщик, видимо, ее выбросил как ненужную. ЧЯДНТ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему бы стартап вообще на С не использовать? Зачем там ассемблер? Там всего-то делов:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, dxp сказал:

А почему бы стартап вообще на С не использовать? Зачем там ассемблер?

Можно, конечно, на Си. Я просто хотел по документу (мигнация с компилятора v5 на v6) переписать ассемблерный стартап. Но с наскоку не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 06.05.2020 в 12:31, Arlleex сказал:

Я просто хотел по документу (мигнация с компилятора v5 на v6) переписать ассемблерный стартап. Но с наскоку не получилось.

Стартап для компилятора v6 и заодно IAR и GCC в одном флаконе. И линкерскрипты для них. Для Keil обратить внимание на первую строчку скаттер-файла - она важна! Для IAR и GCC в принципе и стандартные скрипты подойдут.

startup_iar_gcc_keil_stm32f072.c

LinkerScripts.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, VladislavS сказал:

Стартап для компилятора v6 и заодно IAR и GCC в одном флаконе...

Благодарю! Буду разбираться потихоньку.

На текущий момент оставил это до лучших времен, а сам начал заниматься непосредственно прикладным ПО.

Сейчас пока использую компилятор v6 (armclang) с опцией сборки .s-файлов как для v5 (armasm).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 

Изменено пользователем romas2010

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...