在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。 CubeMX自带了FreeRTOS的插件,可以直接创建基于STM32的FreeRTOS工程。我这次做的是多线程任务调度,因此可以利用开发板自带的三盏LED灯和开发板自带串口作为任务调度的标志。首先配置PG7和PG8为低功耗串口1,以便在串口打印任务调度情况;然后配置板上三盏LED灯(PB7、PB14、PC7配置为输出)。 在时钟配置界面配置MSI(内部高频晶振)、PLLCLK(锁相环倍频),主频80MHz,全速运行。 在外设界面配置FreeRTOS的参数,Config parameters(配置参数)选项卡使用系统默认设置就好;我们重点关注的是Tasks and Queues(任务与队列)选项卡的配置,在此处新建三个任务,设置不同的优先级,配置好堆栈大小(这里要注意一下的是,堆栈大小最好使用默认的128KB,多个任务的总堆栈大小不能超过511KB,否则Heap配置界面会报错,任务也不能正常切换),其它都按默认配置。 在串口配置窗口配置波特率115200、数据位8、停止位1、无校验位就可以了,可以生成工程了。 这里我设置了三个任务,红蓝绿灯按照100、200、300毫秒的间隔闪烁,并且串口打印被调度的任务。由于是在RTOS(实时操作系统)下运行的,三个任务按照规定的调度顺序执行,因此互不冲突。 上传一份工程文件。 |
不错,学习一下,感谢分享~ |
写错了是128words |
感谢分享!! |
请问 怎么确定任务需要多大的堆栈呢? |
谢谢分享 |
支持 |