建立FreeRTOS操作系统-DEMO

建立FreeRTOS操作系统

  • STM32CubeMX中选择FreeRTOS

  • 选择CMSIS_V1(CMSIS_V1和CMSIS_V2是两个版本,这里我们选择CMSIS_V1)

  • 对操作系统进行简要配置:简要参数如下

  • USE_PREEMPTION:是否支持抢占机制,支持则设为Enabled

    TICK_RATE_HZ:系统时钟频率,时钟按照该速率为FreeRTOS中各个任务执行计时-eg:设置为1000,则每个任务的最小调度时间为1ms

    MAX_PRORITIES:最大优先级数量,默认为7

    MINIMAL_STAK_SIZE:最小任务栈大小,每创建一个任务,都需要为该任务分配一定大小的空间,默认为128个字

    MAX_TASK_NAME_LEN:最大任务名称长度,在创建任务时,需要给每个任务起名为标识,默认为16

  • 创建任务,对任务进行配置,具体配置如下(Task and Queues)

  • Task Name:任务名称

    Priority:任务创建时的优先级

    Stack Size (Words):任务栈的大小,默认单位为字

    Enrty Function:任务函数的入口

    Code Generation Option:任务函数代码的生成方式

    As weak:产生一个用__weak修饰符修饰的任务函数

    As external:产生一个外部引用的任务函数,用户需要自己实现该函数

    Default:产生一个默认格式的任务函数,用户需要在该函数实现功能

  • 生成工程,将自动生成FreeRTOS的底层源代码

  • 在FreeRTOS.c中调用osThresdDef()对要创建的任务进行设置

  • 然后调用osThreadCreate()进行创建一个任务

  • 具体参数设置如下

  • 名称:osTheardDef

    功能:对要创建的任务进行设置

    参数1:name-要创建的任务名称

    参数2:thread-要创建的任务代码的入口名称

    参数3:priority-要创建的任务的优先级

    参数4:instances-任务下可创建的线程数量

    参数5:stacksz-任务栈大小

    名称:osThreadCreate

    功能:创建一个任务

    返回值:osThread-任务ID

    参数1:const osThreadDef_t *thread_def-我们通过osThreadDef所设置的任务参数,采用强制转换+任务名的方式进行-eg:在osThreadDef中设置任务名称为LED_RED,则此处输入osThread(LED_RED)

    参数2:void *argument-任务需要的初始化参数,一般填NULL

操作系统基础配置完成


对操作系统的简要理解

操作系统的三种重要的调度算法

  • 先来先服务(FCFS)算法

  • FCFS调度算法,该算法的原理非常简单,当存在多个任务的时候,先就绪的任务占用CPU,直到任务执行结束,进入阻塞态后释放CPU,此时下一个任务才可以占有CPU。

  • 优先级调度算法

  • 优先级调度算法,我们可以提前给各个任务赋予不同的优先级,当一个进程占有了CPU的时候,假如有一个更高优先级的任务就绪,则正在运行的任务会被挂起,转而执行高优先级的任务,直到高优先级任务执行完毕之后,再恢复原任务继续执行。

  • 时间片轮转调度算法

  • 时间片轮转调度算法,为了避免某个任务执行时间过长,导致其他任务一直等待的情况出现,给每一个任务划定一段特定长度的运行时间,成为时间片。如果任务执行时间超出了时间片。则该任务将被挂起,转而执行其他的任务。

当FreeRTOS开始运行后,将同时遵从以上三个算法的原则对各个任务进行调度。

对不同优先级的任务采用优先级调度算法,对于同优先级的任务采用FCFS算法和时间片轮转算法。

需要注意的是FreeRTOS中的任务,不论优先级,都可以被中断给打断。

当需要在FreeRTOS中进行延时操作时,可以通过将任务挂起一段时间的方式实现。在该任务挂起时,其他任务可以占有CPU,等延时结束后,原先被挂起的任务又恢复执行。

一般称呼不使用操作系统的单片机开发方式为“裸机开发“,当进行逻辑开发时,需要自己设计循环,中断,定时等功能来控制各个任务的执行顺序。

而使用操作系统进行开发时,只需要创建任务,操作系统会自动按照一些特定的机制自动进行任务的运行和切换。

注意:使用FreeRTOS后时钟源应该进行更改,不建议使用systick




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值