При сборке программы с помощью 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».

 

Реклама

Руководства по эксплуатации осциллографов Актаком

Удалено по просьбе правообладателя.

Расчет разности фаз по времени запаздывания

dt.png

\varphi = 360 f \Delta t

где:

  • \varphi — разность фаз сигналов, градусы,
  • f  — частота сигналов, Гц,
  • \Delta t — время запаздывания одного сигнала относительно другого, с.

Чтобы рассчитать разность фаз в радианах, нужно воспользоваться следующей формулой.

\varphi = 2 \pi f \Delta t

Та же формула для компьютерных расчетов.

ph = 2 * pi * f * dt

При компиляции 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];