news 2026/4/23 16:04:30

标准库RTOS使用OLED和按键时冲突

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
标准库RTOS使用OLED和按键时冲突

需求:想实现一个OLED显示,按键可以操作的,有上下左右选择的功能。

遇到的问题:OLED显示后按键总是卡死,或者反应速度非常慢。

首先,STM32的delay和vTaskDelay好像是有冲突的,毕竟在移植的时候我们已经把Systick_Handler改动了,可能会对Delay有影响,所以按键的Delay都改成了vTaskDelay。至于OLED初始化里的Delay为什么没有影响,推测应该是在调度器开启之前就没事,调度器开启后如果再用Delay就会造成CPU阻塞卡死。

卡死问题解决后,按键的反应特别慢。OLED某一页的显示肯定是一个临界段,要有个保护的,不可能说它正显示呢,中途来个操作,这显示屏才显示一半,所以某一页的显示内容需要用临界段保护起来。我原本的代码是,在while(1)循环中显示,保护taskENTER_CRITICAL()和taskEXIT_CRITICAL()也是在里面的。这样造成按键反应特别慢,原因是按键扫描本身也是有vTaskDelay参与的,那么这个时候,OLED显示就见缝插针的运行,它一运行就拖家带口,大家都在保护区里,不可能说延时结束就回去嘛。可是如果不要while(1),只让OLED显示一遍,不知道为什么按键函数就卡死了,一种敌不动我不动的感觉。所以while(1)还要保留。以下就是成功运行的案例,按照这个格式填补就可以啦~

void press(void *pvParameters) { //uint32_t press_num = 0; //用来测试执行次数 while(1) { //OLED_ShowNum(0, 0, ++press_num, 3, 16, 0); //用来测试 keyNum = Key_GetNum(); if(keyNum == 1) { /* 一些操作 */ } else if (keyNum == 2) //下一项 { /* 一些操作 */ } vTaskDelay(1); //留出时间允许调度器执行OLED显示函数 } } void OLED(void *pvParameters) { uint32_t sele_num = 0; taskENTER_CRITICAL(); OLED_ShowNum(0, 0+16, ++sele_num, 3, 16, 0); /* 其他显示 */ while(1) { } }

有人提出“按键的外部中断+定时器的状态机写法。外部中断用任务通知,然后定时器处理,然后通过队列将按键事件发出去”,听起来更正规一些,有空也可以研究一下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 22:25:26

为什么这款跨平台工具能成为你的游戏模组下载神器?

为什么这款跨平台工具能成为你的游戏模组下载神器? 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为GOG、Epic平台无法享受Steam创意工坊的海量模组而烦恼吗&a…

作者头像 李华
网站建设 2026/4/23 12:28:24

VRM技术突破与创新方案:Blender插件架构演进与实践

VRM技术突破与创新方案:Blender插件架构演进与实践 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 or later 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 在当前3D内容创作领域的技…

作者头像 李华
网站建设 2026/4/23 14:48:27

如何用Applite让macOS应用管理变得简单高效:3分钟快速上手指南

还在为复杂的终端命令而头疼吗?Applite这款macOS神器将彻底改变你的应用管理方式!作为专为Homebrew Casks设计的图形界面工具,它把繁琐的命令行操作变成了直观的点击体验,让每个用户都能轻松驾驭macOS应用管理。无论你是技术新手还…

作者头像 李华
网站建设 2026/4/21 13:51:56

VRM Blender插件完全指南:从零开始掌握3D角色制作

VRM Blender插件完全指南:从零开始掌握3D角色制作 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 or later 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 想要在Blender中创建精美的…

作者头像 李华
网站建设 2026/4/18 14:21:44

网盘直链下载助手:告别限速的全平台下载神器

还在为网盘下载速度慢如蜗牛而烦恼吗?网盘直链下载助手为您带来终极解决方案!这款开源工具支持八大主流网盘,无需安装任何客户端,即可实现全速下载体验。 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网…

作者头像 李华
网站建设 2026/4/23 13:00:33

HBaseGUI终极指南:如何快速掌握可视化HBase管理工具

HBaseGUI终极指南:如何快速掌握可视化HBase管理工具 【免费下载链接】HbaseGUI HbaseGUI 项目地址: https://gitcode.com/gh_mirrors/hb/HbaseGUI HBase作为分布式列式数据库的核心技术,其强大的存储能力常常被复杂的命令行操作所掩盖。数据管理员…

作者头像 李华