RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:
图1 输入RTT的网址,https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc,然后点击check,旁边显示绿色,既显示校验通过。点击OK,回到User Defined Packs Manager界面,再次点击OK。这时,CubeMx自动连接服务器,获取包描述文件,选择RT-Thread Software Components,点击install now,等待安装好后。 安装好后,显示绿色。如图2所示:
图2然后回到主界面,选择芯片,双击进入工程参数设置。点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:
图3回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:
图4 配置PA5作为输出测试引脚。配置时钟等,无需多言。需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:
图5因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:
图6然后配置Project Manager,Toolchain/IDE使用MDK-ARM.Generate code.在生成的main函数中添加#include "rtthread.h",编译。会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示
图7按照参数进行配置即可。重新Generate code.编译,正常在main.c文件中添加一个线程,如下所示:- tatic struct rt_thread thread;
- static rt_uint8_t thread_stack[THREAD_STACK_SIZE];
- void thread_entry(void *parameter)
- {
- while (1)
- {
- HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
-
- rt_thread_mdelay(1000);
- }
- }
复制代码 main函数中启动线程,并开启调度函数,如下:- rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);
- rt_thread_startup(&thread);
- rt_system_scheduler_start();
复制代码 编译,debug,就是单任务点个灯,效果如图:
移植没啥问题了,就可以多任务模块添加了。 |