嵌入式实时操作系统FreeRTOS原理及应用——基于STM32微控制器13智能手表FreeRTOS实现.pptVIP

嵌入式实时操作系统FreeRTOS原理及应用——基于STM32微控制器13智能手表FreeRTOS实现.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使能抢占式调度 任务创建、调度与同步 使能FreeRTOS的抢占式调度器,赋予需要高响应速度的任务更高优先级,能显著提高系统的响应性能,比如项目中的按键任务。 抢占式调度最关键的地方,是要使高优先级的任务在执行完之后主动让出CPU使用权,让任务进入阻塞态,使低优先级的任务有运行的机会。 让任务进入阻塞态,最常用的方法是调用相对延时阻塞函数vTaskDelay()和绝对延时阻塞函数vTaskDelayUntil()。项目中的大部分任务都是通过调用这二个函数使任务进入阻塞态而让出CPU使用权。 使能时间片调度 任务创建、调度与同步 智能手表共有十一个用户任务,没有必要给每一个任务分配不同的优先级,何况为每个任务确定不同优先级也不是件容易的事情。 使能时间片调度后,FreeRTOS会为每个相同优先级的任务按时间片进行轮流调度,确保每个相同优先级的任务均有同样机会得到执行。 与屏幕操作和显示相关的七个任务、闹钟时间检测任务、闹钟响铃任务这九个任务共享一个任务优先级3,由时间片进行调度。 它们与优先级为4的按键任务、优先级为1的后台计步任务共同组成一个只有三级任务优先级的抢占式任务调度系统,简洁明了。 任务挂起和恢复实现互斥访问 任务创建、调度与同步 项目中一共有十一个用户任务,其中七个任务与屏幕的操作和显示相关,另外一个闹钟响铃任务在响铃时也要使用屏幕。 如果只让使用共享资源的其中一个任务解除挂起,其余任务处于挂起状态,则可实现简单的互斥访问。 七个与屏幕操作和显示相关的任务通过“功能”键进行切换,每按一次“功能”键就切换到下一个任务,让这个任务解除挂起,恢复运行,而其余六个任务则处于挂起状态,实现屏幕显示共享资源的互斥访问。 通过调用suspendScreen()函数一次性挂起这七个相关任务。 互斥量共享蓝牙资源 任务创建、调度与同步 蓝牙上报使用了蓝牙串口发送功能,有二个任务会使用蓝牙串口上报信息。一个是运动计步任务,在打开蓝牙上报开关时,软件定时器周期性通过蓝牙串口上传运动步数等信息。另一个是信息获取任务,通过按键获取任务信息后,通过蓝牙串口上报任务信息。 智能手表使用互斥信号量smaMutexHandle实现这二个任务对蓝牙串口共享资源的互斥访问。需要上报信息时,先尝试获取这个互斥信号量,只有合法持有这个互斥量时,才允许任务通过蓝牙串口发送数据,共享资源使用完毕及时归还这个互斥信号量。 任务通知同步闹钟任务 任务创建、调度与同步 信号量可用以任务同步,任务通知同样可用于任务之间的同步,且具有更少的资源消耗和更高的执行效率。 闹钟时间检测任务不断比对当前时间与闹钟设置时间,当到达闹钟设置的时间后,通过xTaskNotifyGive()任务通知发送函数,给alarmDispTaskHandle闹钟响铃任务发送任务通知,闹钟响铃任务收到这个任务通知便执行闹钟响铃动作,实现任务之间的同步。 用队列共享按键 任务创建、调度与同步 智能手表中的大多数任务都使用到了按键功能,按键任务与使用按键的这些任务之间通过一个队列进行数据的单向传递。 按键任务对获取到的键值进行一些必要处理后,通过xQueueSendToBack()向后入队函数将键值放入queueKeyHandle队列。 软件定时器使用 任务创建、调度与同步 FreeRTOS在调度器开启时,创建了一个定时器服务任务。 智能手表使用了二个软件定时器,一个单次软件定时器,一个周期软件定时器,软件定时器执行的功能在其回调函数中实现。 单次软件定时器用于熄灭屏幕,每当按键按下,在非测量等需连续使用屏幕的情况下,会启动这个单次软件定时器,时间到达后熄灭显示屏。 七、调试与优化 智能手表FreeRTOS实现 调试与优化 智能手表整体项目结构 逐项检查、测试 调试与优化 启动断点调试,通过观察程序变量、外设寄存器状态,可以排除大部分的驱动及算法逻辑错误。 反复测试和调整,让使用FreeRTOS操作系统的智能手表满足功能和性能要求:程序运行流畅,按键灵敏、任务切换正确、迅速,时间设置、闹钟设置界面正确,秒表计时准确,心率波形直观,脉博测试准确,后台计步工作正常,步数正确。蓝牙上报信息正常。 关注内存信息 调试与优化 功能测试正常后,要重点关注FreeRTOS堆内存剩余,以及各任务堆栈剩余大小。 这些内存和堆栈对系统长期稳定运行至关重要,一旦堆内存不足或者任务堆栈溢出,将引起系统崩毁。 调试阶段可以通过信息获取任务,输出任务信息和任务运行时间信息,作为调整任务及任务堆栈的依据。 调试与优化 任务信息和任务运行时间信息。 OLED12864 算法及驱动 OLED12864 算法及驱动 1、ASCII字符显示 驱动程序支持12、16、24点阵的可打印ASCII字符显示。要显示这些点阵的字符,需要用取模软件对

文档评论(0)

139****1983 + 关注
实名认证
文档贡献者

副教授、一级建造师持证人

从事职业教育近20年,高级职称。

领域认证该用户于2023年06月21日上传了副教授、一级建造师

1亿VIP精品文档

相关文档