Cubeide新建RT-thread(3.1.5)工程记录
cubeide版本1.8,rt-thread版本3.1.5,实验平台正点原子精英板(F103ZET6)
1、准备rt-thread包
进入包管理页面,选择网络获取,之后输入网址
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
2、添加包
三个都勾上即可
可见多出如下选项 这里选择内核版本,其他参数默认,我大概看了下其他参数,跟官方说的影响不大 之后常规操作一下,就是建立一个带串口1和led的工程 取消使用一些中断,这些中断在rt-thread里面被复用了 具体为 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断
后面选择好时钟以及debug就可以生成代码了
3、修改代码
直接编译会报错,因此需要修改代码
首先是看一下这个目录 因为我之前一直这里报错,不知道啥原因,他自己定义了一个串口二的初始化函数,然后还有重定向输入输出,但是一直报错,干脆就给他删掉重写一个就完事了
删掉串口定义和输入输出函数,在main.c中添加(末尾处添加即可)
char rt_hw_console_getchar(void) { int ch = -1; if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET) { ch = huart1.Instance->DR & 0xff; } else { if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE) != RESET) { __HAL_UART_CLEAR_OREFLAG(&huart1); } rt_thread_mdelay(10); } return ch; } void rt_hw_console_output(const char *str) { rt_size_t i = 0, size = 0; char a = ; __HAL_UNLOCK(&huart1); size = rt_strlen(str); for (i = 0; i < size; i++) { if (*(str + i) == ) { ITM_SendChar(a); HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1); } HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1); } }
下面需要修改下启动文件 注释bl main,替换为bl entry
4、编写rt-thread线程
新建一个rtthread_test.c文件,加入下面代码
#include "rtthread.h" #include "main.h" #include "stdio.h" static struct rt_thread led_thread; static char led_thread_stack[256]; static void led_thread_entry(void *parameter); int MX_RT_Thread_Init(void) { //初始化线程 rt_err_t rst; rst = rt_thread_init(&led_thread, (const char *)"ledtest", /* 线程名字 */ led_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ &led_thread_stack[0], sizeof(led_thread_stack), /* 线程栈大小 */ RT_THREAD_PRIORITY_MAX - 2, /* 线程的优先级 */ 20); /* 线程时间片 */ if (rst == RT_EOK) { rt_thread_startup(&led_thread); //创建线程 } return 0; } static void led_thread_entry(void *parameter) { while (1) { rt_kprintf("rt-thread_test "); HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); rt_thread_mdelay(1000); } }
线程含义参数理解
在下面官网文档可以获取
https://www.rt-thread.org/document/api/group___thread.html#gacd985aa60939b95e510f144610f001b9
如下图所示 main.c中引入
#include "rtthread.h" extern int MX_RT_Thread_Init(void);
初始化引入
MX_RT_Thread_Init();
while循环中引入
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5); rt_kprintf("mian_test "); rt_thread_mdelay(500);
结果如下
上一篇:
通过多线程提高代码的执行效率例子