赞
踩
KEIL
STM32F103C8T6
杜邦线
mcuisp烧录工具
firetool串口助手
它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务。事实上一个处理器核心在某时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行快速的切换,给人造成多个任务在同一时刻同时运行的错觉。
RT-Threa系统中,任务通过线程实现的,RT-Thread中的线程调度器也就是以上提到的任务调度器。
物联网操作系统是指以操作系统内核(RTOS\Linux等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台。
RT-Thread与其他很多RTOS主要区别之一是:它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。
这里我们可以参考官方的教程:基于 CubeMX 移植 RT-Thread Nano
要获取 RT-Thread Nano 软件包,需要在 CubeMX 中添加
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
这里我们需要使用在 CubeMX 中添加硬件包同样的方式来添加我们要使用的 RT-Thread Nano 软件包,过程如下:
IDE内安装具体步骤
(1)打开 MDK 软件,点击工具栏的 Pack Installer 图标:
(2)点击右侧的 Pack,展开 Generic,可以找到 RealThread::RT-Thread,点击 Action 栏对应的 Install ,就可以在线安装 Nano Pack 了。
1.创建任务
#include "rtthread.h" #include "main.h" #include "stdio.h" struct rt_thread led1_thread; rt_uint8_t rt_led1_thread_stack[128]; void led1_task_entry(void *parameter); //初始化线程函数 void MX_RT_Thread_Init(void) { //初始化LED1线程 rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20); //开启线程调度 rt_thread_startup(&led1_thread); } //主任务 void MX_RT_Thread_Process(void) { printf("Hello RT_Thread!!!"); rt_thread_delay(1000); } //LED1任务 void led1_task_entry(void *parameter) { while(1) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, GPIO_PIN_RESET); rt_thread_delay(500); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, GPIO_PIN_SET); rt_thread_delay(500); } }
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ MX_RT_Thread_Init(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ MX_RT_Thread_Process(); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
#ifdef __GNUC__ /* With GCC, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the USART2 and Loop until the end of transmission */ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; }
要勾选上Use MicoLIB选项
本次实验用到了RT-Thread Nano ,它是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小。Nano开源免费,小巧,简单是它的优点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。