При сборке программы с помощью Sourcery CodeBench и скрипта линкера «Device/ARM/ARMCM0/Source/GCC/gcc_arm.ld» из CMSIS v3.20 линкер выдает ошибку:

cannot find libnosys.a

Наверное, за это в ответе строка из скрипта:

/* Library configurations */
GROUP(libgcc.a libc.a libm.a libnosys.a)

Проблема решилась использованием скрипта «Device/ARM/ARMCM0/Source/G++/gcc_cs.ld».

 

При компиляции core_cm3.c из STM32F10x SPL v3.5.0 компилятор (gcc из Sourcery CodeBench) выдает ошибки:

Error: registers may not be the same — `strexb r0,r0,[r1]’
Error: registers may not be the same — `strexh r0,r0,[r1]’

Такой код по разному воспринимается разными компиляторами:

const int data_size = 7;
int data[data_size] = {1,2,3,4,5,6,7};

Если использовать компилятор из Keil MDK-ARM, то код компилируется и работает нормально. Но компилятор (gcc) из Sourcery Сodebench выдает ошибку:

variable-sized object may not be initialized

При этом, без ошибок компилируется код:

const int data_size = 7;
int data[data_size];