freertos简介与移植

freertos是一个可裁剪的小型rtos系统,特点:

  • 支持抢占式,合作式和时间片调度
  • saferos衍生自freertos,更完整
  • 提供了一个用于低功耗的tickless模式
  • 系统的组件在创建时可以选择动态或者静态的ram,例如任务,消息队列,信号量等等
  • 支持Corex-M系列MPU单元
  • 小巧简单,通常其内核占用4k-9k字节的空间
  • 高可移植性,主要由C语言编写
  • 支持实时任务和协程
  • 堆栈溢出检测
  • 创新时间组
  • 高效软件定时器

freertos编程风格(学习操作系统前了解风格有助于阅读源码)

新定义的数据类型:
来自普中教程

变量名命名:

如char型变量前缀是c,short型变量前缀是s,long型变量前缀是l,portBASE_TYPE类型变量前缀是x。其他例如数据结构,任务句柄,队列句柄等定义的变量名前缀也是x。
无符号型变量前缀加u,指针变量前缀加p,例如定义一个无符号char类型变量前缀会加uc,定义一个char类型指针变量时加前缀pc

函数名命名:

如果是私有的函数会加prv(private)前缀,从函数名可以看出他的返回值,定义文件名,和函数功能,例如vTaskPrioritySet()函数的返回值为v,在task.c这个文件中定义。

宏定义命名:

在宏定义名加小写字母前缀表明此定义所在的文件,例如port前缀在portable的h文件中,task前缀在task的h文件中,pd前缀在projdefs的h文件中,config前缀在FreeRTOSConfig的h文件中。
此外注意一些固定的宏:pdTRUE值为1,pdFALSE值为0,pdPASS值为1,pdFAIL值为0。

源码文件介绍:

FreeRTOS:Demo里是官方为各大芯片厂商写好的移植系统文件,极具参考价值。License里面是各种许可信息。Source里面源文件头文件include都是适用的,需要移植的C文件在portable文件里面,这里有不同的环境,内核该用的文件。Keil,GCC,IAR等等环境,RVDS是不同内核文件,主要是连接软硬件的接口文件。Memmarg是内存管理方式,推荐用heap4。

移植过程:
基础工程-》建文件夹freertos放系统文件源码,全部拷贝进来-》删掉portable中不需要的文件,例如keil里移植到stm32就只需要Keil,Memmarg,RVDS-》单击三色块,工程组添加freeRTOS_port和freeRTOS_core,前者添加内存管理文件Memmarg和接口文件RVDS(port文件),后者添加Source里面除了文件夹的所有源文件-》指定头文件路径:单击魔术棒选择c/c++,添加inclue和RVDS中的头文件-》编译检查错误-》将Demo里的或者已有的FreeRTOSconfig文件复制到工程头文件中-》编译检查错误:与中断相关的俩函数重复了,需要注释掉上面的空函数108和120行左右(图一)-》替换延时函数systick文件(->需要编写systick_Handler函数中的心跳函数先判断系统状态(图二))
在这里插入图片描述
图1(在stm32f10x_it.c文件里面)
在这里插入图片描述
图2
操作系统的时钟源是滴答定时器,在systick_init里根据芯片时钟初始化操作系统的时钟。基础实验里滴答定时器是APBH的八分频,也就是9MHz,这里要改为72MHz。一个微妙延时函数,两个毫秒延时函数其中ms要引发任务调度,xms不引发任务调度。(普中嗨小易P11)

移植过程常见错误:

  1. 直接复制工程,芯片型号错误
  2. 中断函数重定义
  3. SysTick_Handler函数未实现
  4. 在option里面未勾选use microlib选项
  5. 未添加头文件路径

任务延时

在这里插入图片描述
上:使用了freertos的延时,会引发任务调度
下:不会引起任务调度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值