STM32H7 创建ThreadX工程的快捷方式
[复制链接]
本帖最后由 BinWin 于 2021-9-27 11:49 编辑
前段时间参加得评测活动有结果了,差强人意啊。
后面空闲的时候又学习了其他内容,分享一下,也可以所示之前的补充吧。
毫无疑问,使用ST的控制器和处理器已经可以愉快的使用ecosystem体系中的各个软件包了。ThreadX自开源的那一刻起,相信不少ST的用户都迫不及待的想体验一把。时光慢慢,然后获得授权,然后发布Cube_FW,然后,,没有然后了,可以使用CubeMX无痛生成ThreadX工程了。本文就是一次成功的尝试。我们略过RCC、SYS这些大家再熟悉不过的内容,直接寻找目标,RTOS组件。如果你用过TouchGFX那么很容易就找到入口了。
这个窗口下选择安装软件包后就可以直接新建IOC工程来大显身手了。
细心的朋友会发现一个不完美的地方,那就是GUIX没有被集成。原因呢,可能就是上面提到的TouchGFX,保护意图吧,可以理解。不过能否将这两者配合使用呢?毕竟可以省去工程添加源码那种不方便的功夫消耗。留着这个想法以后再议。
回到重点的地方,添加ThreadX的组件和功能。Core是一定需要,TraceX是调试组件,可选。HW一般都是自己的板卡了,这里使用过的是ART-Pi,基于STM32H750XB平台的硬件。这些内容做完了,就可以回到CubeMX主页面做软件上的配置修改了。
最简主义,所以修改一下RTOS的时钟节拍就行了,默认1K的栈空间目前是没有什么问题的。TX_TIMER_TICKS_PER_SECOND修改为1000,一般是1ms的最小调度时隙就够很多场景使用了。之外,再配置一个GPIO用来满足点灯的需求,配置一个串口用来输出一下内心的喜悦。然后就直接生成MDK工程了,不要有任何担心
此时的工程是没有任务运行的,刚才的LED和串口就该在这时候写入代码了。可以是这样子的:
#define Thread_Led_PRIO 31u
#define Thread_Led_STK_SIZE 128u
static TX_THREAD Thread_Led_TCB;
uint8_t Thread_Led_STK[Thread_Led_STK_SIZE];
void Thread_Led(ULONG thread_input){
while(1){
HAL_GPIO_TogglePin(LED_B_GPIO_Port,LED_B_Pin);
tx_thread_sleep(200);
}
}
#define Thread_UART_PRIO 31u
#define Thread_UART_STK_SIZE 512u
TX_THREAD Thread_UART_TCB;
uint8_t Thread_UART_STK[Thread_UART_STK_SIZE];
uint8_t str[] = "threadx running\n";
extern UART_HandleTypeDef huart4;
void Thread_UART(ULONG thread_input){
while(1){
HAL_UART_Transmit(&huart4,str,15,0xff);
tx_thread_sleep(500);
}
}
以上两个APP在线程入口函数内创建即可。不出意外,此时可以编译下载运行一气呵成了。
VOID tx_application_define(VOID *first_unused_memory)
{
tx_thread_create(&Thread_Led_TCB,"thread_led",Thread_Led,0,&Thread_Led_STK[0],Thread_Led_STK_SIZE,Thread_Led_PRIO,3,TX_NO_TIME_SLICE,TX_AUTO_START);
tx_thread_create(&Thread_UART_TCB,"thread_led",Thread_UART,0,&Thread_UART_STK[0],Thread_UART_STK_SIZE,Thread_UART_PRIO,3,TX_NO_TIME_SLICE,TX_AUTO_START);
}
不忘看下串口有没有输出啊,似乎ThreadX很给力
以上内容摘自微信公众号 懂一点技术的老王 ,有兴趣的可以去关注,号主会时不时的分享一些时下较热门的业内新闻和技术点
原文地址
https://mp.weixin.qq.com/s/WeXBcRuSOb_49yM8ncm21A
|