韦东山freeRTOS教程之FreeRTOS概述与体验(1)

文章目录 教程目录 1.1 freertos目录结构 1.1 freertos目录结构 1.2 核心文件 1.3 移植时涉及的文件 1.4 头文件相关 1.4.1 头文件目录 1.4.2 头文件 1.5 内存管理 1.6 demo 1.7 数据类型和编程规范 1.7.1 数据类型 1.7.2 变量名 1.7.3 函数名 1.7.4 宏的名 1.8 安装keil 1.8.1 下载keil 1.8.2 安装keil 1.8.3 安装pack 1.9 使用模拟器运行第1个程序 1.10 使用逻辑分析仪  
需要获取更好阅读体验的同学,请访问我专门设立的站点查看,地址:http://rtos.100ask.net/
教程目录 本教程连载中,篇章会比较多,为方便同学们阅读,点击这里可以查看文章的 目录列表,目录列表页面地址:https://blog.csdn.net/thisway_diy/article/details/121399484
1.1 freertos目录结构 以keil工具下stm32f103芯片为例,它的freertos的目录如下:
1.1 freertos目录结构 以keil工具下stm32f103芯片为例,它的freertos的目录如下:
主要涉及2个目录:
demo demo目录下是工程文件,以芯片和编译器组合成一个名字 比如:cortex_stm32f103_keil source 根目录下是核心文件,这些文件是通用的 portable目录下是移植时需要实现的文件 目录名为:[compiler]/[architecture] 比如:rvds/arm_cm3,这表示cortexm3架构在rvds工具上的移植文件 1.2 核心文件 freertos的最核心文件只有2个:
freertos/source/tasks.c freertos/source/list.c 其他文件的作用也一起列表如下:
freertos/source/下的文件 作用
tasks.c 必需,任务操作
list.c 必须,列表
queue.c 基本必需,提供队列操作、信号量(semaphore)操作
timer.c 可选,software timer
event_groups.c 可选,提供event group功能
croutine.c 可选,过时了
1.3 移植时涉及的文件 移植freertos时涉及的文件放在freertos/source/portable/[compiler]/[architecture]目录下,
比如:rvds/arm_cm3,这表示cortexm3架构在rvds或keil工具上的移植文件。
里面有2个文件:
port.c portmacro.h 1.4 头文件相关 1.4.1 头文件目录 freertos需要3个头文件目录:
freertos本身的头文件:freertos/source/include 移植时用到的头文件:freertos/source/portable/[compiler]/[architecture] 含有配置文件freertosconfig.h的目录 1.4.2 头文件 列表如下:
头文件 作用
freertosconfig.h freertos的配置文件,比如选择调度算法:configuse_preemption
每个demo都必定含有freertosconfig.h
建议去修改demo中的freertosconfig.h,而不是从头写一个
freertos.h 使用freertos api函数时,必须包含此文件。
在freertos.h之后,再去包含其他头文件,比如:
task.h、queue.h、semphr.h、event_group.h
1.5 内存管理 文件在freertos/source/portable/memmang下,它也是放在portable目录下,表示你可以提供自己的函数。
源码中默认提供了5个文件,对应内存管理的5种方法。
参考文章:freertos说明书吐血整理【适合新手+入门】
后续章节会详细讲解。
文件 优点 缺点
heap_1.c 分配简单,时间确定 只分配、不回收
heap_2.c 动态分配、最佳匹配 碎片、时间不定
heap_3.c 调用标准库函数 速度慢、时间不定
heap_4.c 相邻空闲内存可合并 可解决碎片问题、时间不定
heap_5.c 在heap_4基础上支持分隔的内存块 可解决碎片问题、时间不定
1.6 demo demo目录下是预先配置好的、没有编译错误的工程。目的是让你可以基于它进行修改,以适配你的单板。
这些demo还可以继续精简:
demo/common中的文件可以完全删除 main函数中只需要保留2个函数: prvsetuphardware() vtaskstartscheduler() 如下图所示 1.7 数据类型和编程规范 1.7.1 数据类型 每个移植的版本都含有自己的portmacro.h头文件,里面定义了2个数据类型:
ticktype_t: freertos配置了一个周期性的时钟中断:tick interrupt 每发生一次中断,中断次数累加,这被称为tick count tick count这个变量的类型就是ticktype_t ticktype_t可以是16位的,也可以是32位的 freertosconfig.h中定义configuse_16_bit_ticks时,ticktype_t就是uint16_t 否则ticktype_t就是uint32_t 对于32位架构,建议把ticktype_t配置为uint32_t basetype_t: 这是该架构最高效的数据类型 32位架构中,它就是uint32_t 16位架构中,它就是uint16_t 8位架构中,它就是uint8_t basetype_t通常用作简单的返回值的类型,还有逻辑值,比如pdtrue/pdfalse 1.7.2 变量名 变量名有前缀:
变量名前缀 含义
c char
s int16_t,short
l int32_t,long
x basetype_t,
其他非标准的类型:结构体、task handle、queue handle等
u unsigned
p 指针
uc uint8_t,unsigned char
pc char指针
1.7.3 函数名 函数名的前缀有2部分:返回值类型、在哪个文件定义。
函数名前缀 含义
vtaskpriorityset 返回值类型:void
在task.c中定义
xqueuereceive 返回值类型:basetype_t
在queue.c中定义
pvtimergettimerid 返回值类型:pointer to void
在tmer.c中定义
1.7.4 宏的名 宏的名字是大小,可以添加小写的前缀。前缀是用来表示:宏在哪个文件中定义。
宏的前缀 含义:在哪个文件里定义
port (比如portmax_delay) portable.h或portmacro.h
task (比如taskenter_critical()) task.h
pd (比如pdtrue) projdefs.h
config (比如configuse_preemption) freertosconfig.h
err (比如errqueue_full) projdefs.h
通用的宏定义如下:
宏 值
pdtrue 1
pdfalse 0
pdpass 1
pdfail 0
1.8 安装keil 本教程的所有程序,都是使用keil开发,运行在keil的模拟器上。
1.8.1 下载keil keil-mdk(keil arm microcontroller development kit)前生是德国keil公司,后被arm收购,是arm官方的集成开发环境。
打开keil官网(https://www.keil.com/download/product/),点击“mdk-arm”进行下载。
随后进入个人信息完善页面,按提示填写所有的信息,如下图所示,填写完后,点击“submit”提交。
随后进入下载页面,点击“mdk532.exe”即可下载。
1.8.2 安装keil 下载完后,点击运行该文件,进入安装界面,选择“next >>”。
接着进入用户协议界面,勾选同意协议,点击“next >>”。
然后设置安装路径,如下图所示:
第一个“core”是软件的安装路径,
第二个“pack”是芯片的硬件支持包的安装路径,
保持默认路径或者设置为如下图所示一样的即可。
如果是自定义设置,建议为全英文路径,不建议为包含有中文的路径。
选择好之后点击“next >>”。
随后需要设置个人信息,随便填写即可,如下图所示。
之后便进入安装进度界面,等待安装完成。
安装过程中,回弹出驱动安装界面,勾选“始终信任来自‘arm ltd’的软件”,然后点击“安装”,如下图。
之后会自动进入“pack installer”界面,这里会检查安装的编译器、cmsis等是否是最新的,由于我们安装的是官网提供的最新的mdk,所以这里一般情况下都是不需要更新的。
1.8.3 安装pack 一个keil的开发环境,除了keil软件,还需要安装对应的pack。
比如这里目标机的mcu是stm32f103zet6,就需要下载该系列的的pack,如果是stm32f4系列,就需要下其它系列pack。
使用“pack installer”可以方便的对pack安装和管理。
在左上角搜索框输入“stm32f103”,展开搜索结果,可以看到stm32f103ze,点击右边的简介链接即可跳转到pack下载页面。
下载完成得到“keil.stm32f1xx_dfp.2.3.0.pack”。
直接双击该文件,随后弹出如下图所示界面,点击“next”进行安装。
至此,keil和pack就安装完成了。
1.9 使用模拟器运行第1个程序 先获取配套示例代码。
双击freertos_01_create_task\freertos\demo\cortex_stm32f103_keil\rtosdemo.uvprojx打开第一个示例。
打开之后,首先要编译工程,才能使用模拟器运行,点击build图标进行编译,如下图所示:
编译完成后,点击debug按钮进行仿真,如下图所示:
第一个程序里面创建了两个任务,两个任务一直打印各自的信息。
这里需要打开串口显示模拟窗口,显示任务的打印内容。
点击左上角菜单的“view”,然后选择“serial windows”,点击“uart #1”,如下图所示:
最后,点击“run”运行程序,右下角串口显示窗口将打印两个任务的信息。
如果想退出模拟器仿真,再次debug按钮退出,如下图所示:
1.10 使用逻辑分析仪 本课程的程序有两种输出方式:
串口:查看打印信息 逻辑分析仪:观察全局变量的波形,根据波形解析任务调度情况 下面举例说明逻辑分析仪的用法。
双击freertos_06_taskdelay\freertos\demo\cortex_stm32f103_keil\rtosdemo.uvprojx打开该示例。
打开之后,首先要编译工程,点击build图标进行编译。
编译完成后,点击debug按钮进行仿真。
本实例使用模拟器的逻辑分析仪观察现象。
首先在“main.c”的主函数加入断点,在代码行前的灰色处,点击一下就会有一个红色小点,就是设置的“断点”。
然后点击“run”运行,程序运行到断点位置,就会停下来等待下一步操作:
在代码中找到全局变量flag 鼠标选中flag,然后点击鼠标右键,在弹出的菜单里选择add ‘flag’ to…,选择“analyzer”, 如下图所示:
此时在代码框上面,就会出现逻辑分析仪“logic analyzer”显示窗口,里面分析的就是变量flag。
点击这个flag,然后右键,选择“bit”,以便观察,如下图所示:
再点击一下“run”,继续运行,此时逻辑分析仪窗口显示变量flag的bit值变化,如下图所示:
在逻辑分析仪窗口,可以使用鼠标滚轮放大、缩小波形。
需要获取更好阅读体验的同学,请访问我专门设立的站点查看,地址:http://rtos.100ask.net/


诺基亚9什么时候上市最新消息:诺基亚9跑分、配置曝光,极致性能!8GB运存用上两年都不卡!
2018集成电路晶圆代工市场将达714亿美元
台企供应华为5G基站的光收发器外延芯片显著增长  华为将推出自有品牌显示屏
面向HAECS应用实现标准化的DECT技术解析
软银CEO孙正义预计ARM架构芯片年出货量将达到1万亿颗
韦东山freeRTOS教程之FreeRTOS概述与体验(1)
三星Note8、小米7、Iphone8、华为Mate10下半年这些手机你更看好哪一个?
电瓶修复技术—电池组最容易出现的问题解决方案
选择交流或直流齿轮减速电机时需注意的几个要点
智慧LED灯杆屏应用价值不断提升
PC装机党的噩梦来了:内存价格将持续上涨
HGSTUltraStarHe12评测 12TB容量压制没有谁敢说比它更稳
全面屏大战一触即发,华为P11将搭载6.0全面屏,闪存问题能否解决
科创板上市推荐指引来了:优先三类企业、重点七大领域!更有16个问答搞懂发行上市审核
时间同步网状协议的技术概述
一大波渲染图来袭 数华为p10和小米6 MIX最美
我国顺利突破EUV***技术 哈工大突破***核心部件
表面光电压谱仪的软件设计
苹果AirPods Max将在12月15日正式发售
览邦F9 FreeBuds Plus多模式降噪无线蓝牙耳机,舒适降噪, 安静聆听