stm32cubeide threadx 开启 stack check

需求 如何使用 stm32cubeide 开启 threadx 中的 stack check ? 解决 使能 stack check 在项目属性中, C/C++ Build -> Settings -> MCU GCC Compiler -> Preprocessor 中添加 TX_ENABLE_STACK_CHECKING 在 MCU G++ Compiler 中添加同样的 TX_ENABLE_STACK_CHECKING printf 函数 #include "stdio.h" #include "usart.h" int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 0xFFFF); return len; } *注意: 需要在头文件中增加 int _write(int file, char *ptr, int len); , 否则可能无法覆盖由 __attribute__((weak)) 修饰的原来 _write. * 处理函数 VOID StackErrorHandler(TX_THREAD * thread_ptr) { printf("=============================================================== \n"); printf("如下任务被检测出栈溢出 \n"); printf("=============================================================== \n"); printf(" 任务优先级 任务栈大小 当前使用栈 最大栈使用 任务名 \n"); printf(" Prio StackSize CurStack MaxStack Taskname \n"); TX_THREAD *p_tcb; /* 定义一个任务控制块指针 */ p_tcb = &ServiceVibration; /* 遍历任务控制列表TCB list),打印所有的任务的优先级和名称 */ do { if (p_tcb !...

2023-11-10 · 2 min · 252 words · RamLife

stm32cubeide 使用 threadx

需求 如何使用 stm32cubeide 运行 threadx? 解决 启用 threadx core 打开项目 ioc 文件, Middleware and software Packs -> THREADX -> Mode 勾选 core 下方的 configuration 中, TX_TIMER_TICKS_PER_SECOND 设置为 1000. Memory Configuration 中的 ThreadX memory pool size 也设置大一点,这个是默认生成的字节池的大小。 左侧 System Core 中的 SYS, 修改 Timebase Source 为 TIM7. 这个一定要修改,因为 HAL 的基准是 systick, threadx 的基准也是 systick, 如果不修改,会导致不自动生成 systick 的 handler 函数,导致进入 hard fault. 至于到底修改为哪个 tim, 这个就随便了。 保存自动生成代码。 使用 threadx 新建文件,创建 UINT ThreadInit(TX_BYTE_POOL * byte_pool) 这样的函数,然后在 app....

2023-11-09 · 1 min · 209 words · RamLife