Jump to content
    

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)

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

Share this post


Link to post
Share on other sites

1 hour ago, ev_zubkov said:

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

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

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

image.thumb.png.0fbcb8906f46479a6a2e372933c162fd.png

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

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

Share this post


Link to post
Share on other sites

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

 -mcpu=cortex-m0 

 

Share this post


Link to post
Share on other sites

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 и ищете причину почему компилится эта команда, в то время как не должна.

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

Share this post


Link to post
Share on other sites

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

Edited by ev_zubkov

Share this post


Link to post
Share on other sites

@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 файл - временный, ассемблерный результат обработки си-шного исходника (ну там же по пути очевидно же).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...