donatello1996 发表于 2017-5-14 20:06:07

【NUCLEO-L496ZG评测】FreeRTOS之多线程任务调度

    在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(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(实时操作系统)下运行的,三个任务按照规定的调度顺序执行,因此互不冲突。


    上传一份工程文件。

strang 发表于 2017-5-15 12:00:16

不错,学习一下,感谢分享~

songzhaofeng 发表于 2017-5-15 15:24:45

写错了是128words

HenryChen 发表于 2017-5-16 12:10:28

感谢分享!!

lifengheart 发表于 2017-5-28 17:02:18

请问 怎么确定任务需要多大的堆栈呢?

mo-416898 发表于 2018-3-21 17:11:15

谢谢分享

sdfskljh 发表于 2018-4-22 14:02:10

支持               
页: [1]
查看完整版本: 【NUCLEO-L496ZG评测】FreeRTOS之多线程任务调度