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

Azure RTOS на STM32F0

Добрый день. Пытаюсь запустить Azure RTOS на STM32F0 по примеру отсюда. Только заменил на свой поток:

#include "tx_api.h"
#include "main.h"

TX_THREAD my_thread;

void threadWorker(ULONG thread_input){
	while(1){
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
		tx_thread_sleep(500);
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
		tx_thread_sleep(500);
	}
}

void tx_application_define(void *first_unused_memory)
{
    /* Create my_thread! */
    tx_thread_create(&my_thread, "My Thread", threadWorker, 0x1234, first_unused_memory, 1024, 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
}

В итоге получаю:

...
arm-none-eabi-gcc "../threadx_old/common/src/tx_trace_buffer_full_notify.c" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F072xB -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -I../threadx_old/common/inc -I../threadx_old/ports/cortex_m4/gnu/inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"threadx_old/common/src/tx_trace_buffer_full_notify.d" -MT"threadx_old/common/src/tx_trace_buffer_full_notify.o"  -mfloat-abi=soft -mthumb -o "threadx_old/common/src/tx_trace_buffer_full_notify.o"
arm-none-eabi-gcc "../threadx_old/common/src/tx_trace_disable.c" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F072xB -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -I../threadx_old/common/inc -I../threadx_old/ports/cortex_m4/gnu/inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"threadx_old/common/src/tx_trace_disable.d" -MT"threadx_old/common/src/tx_trace_disable.o"  -mfloat-abi=soft -mthumb -o "threadx_old/common/src/tx_trace_disable.o"
C:\Users\user\AppData\Local\Temp\ccOCjSPf.s: Assembler messages:
C:\Users\user\AppData\Local\Temp\ccOCjSPf.s:357: Error: selected processor does not support `rbit r3,r3' in Thumb mode
C:\Users\user\AppData\Local\Temp\ccOCjSPf.s:365: Error: selected processor does not support `clz r3,r3' in Thumb mode
C:\Users\user\AppData\Local\Temp\ccOCjSPf.s:462: Error: selected processor does not support `rbit r3,r3' in Thumb mode
C:\Users\user\AppData\Local\Temp\ccOCjSPf.s:470: Error: selected processor does not support `clz r3,r3' in Thumb mode
make: *** [threadx_old/common/src/subdir.mk:571: threadx_old/common/src/tx_thread_system_suspend.o] Error 1
make: *** Waiting for unfinished jobs....
"make -j12 all" terminated with exit code 2. Build might be incomplete.

19:03:44 Build Failed. 6 errors, 0 warnings. (took 1s.130ms)

Как это можно починить? заранее благодарен за ответы.

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


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

1 hour ago, ev_zubkov said:

Добрый день. Пытаюсь запустить Azure RTOS на STM32F0 по примеру отсюда. Только заменил на свой поток:

У вас AZUR RTOS видит не то ядро.

Из вашей ссылки

image.thumb.png.0fbcb8906f46479a6a2e372933c162fd.png

Вы это учли при настройки проекта ? 

Ваше ядро cortex-m0.

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


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

@dimka76, да, при создании проекта изменил папку с инклудами на cortex_m0.
и компилятору при сборке передается верное ядро: 

 -mcpu=cortex-m0 

 

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


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

4 часа назад, ev_zubkov сказал:

C:\Users\user\AppData\Local\Temp\ccOCjSPf.s:357: Error: selected processor does not support `rbit r3,r3' in Thumb mode

Вангую, что "357" - это номер строки, в которой стоит команда RBIT. Которую не знает M0. Возможно весь ccOCjSPf.s - для другого ядра, а может там есть блоки включаемые условной компиляцией в зависимости от ядра. Открываете ccOCjSPf.s и ищете причину почему компилится эта команда, в то время как не должна.

Остальные строки - аналогично.

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


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

@jcxz, я так и попытался сделать, но такого файла не существует, возможно, он создается при сборке и потом удаляется

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

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


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

@ev_zubkov, если вам ещё актуально.

1) кажется, у вас сборка идёт в несколько потоков. Поэтому сообщения о компиляции tx_trace_XXX.c - к делу не относятся, старт компиляции tx_thread_system_suspend.c, в котором, собственно, и содержится ошибка, чуть выше.

2) в этом самом system_suspend используется макрос TX_LOWEST_SET_BIT_CALCULATE. В старших cortex-m он разворачивается в две ассемблерные команды - clz и rbit (вот оно). В cortex-m0 таких команд нет, и нужна отдельная функция (кажется, отсюда). Ваша задача - найти, откуда компилятор притащил неверный tx_port.h.

3) .s файл - временный, ассемблерный результат обработки си-шного исходника (ну там же по пути очевидно же).

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


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

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

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

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

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

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

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

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

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

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