| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (五、无线温湿度传感器 之 完结篇) -> 正文阅读 |
|
[嵌入式]RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (五、无线温湿度传感器 之 完结篇) |
前言在完成基本的传感器采集,串口通讯移植修改后,其实作为一个单品传感器已经是正常的工作起来了,但是如果我们在使用产品的时候有特殊情况,比如需要发送特定的无线报文,或者设置不同的工作模式之类的操作,我们就可以通过按键操作进行一定的配置。 所以本文会移植一个按键驱动,能够支持按键 短按,固定时间的长按等操作,同时周期执行的程序改成使用定时器来控制。
一、按键操作在初步的测试框架中,我当时使用的是简单的按键处理方式,这里也上一下源码做测试备份:
但是在实际中,如果要实现长按,组合按之类的方式,还是需要一个适用的按键驱动。 1.1 按键驱动移植按键驱动 是用我自己一直使用的一个,在我博文以前上传过,.c.h文件都开源了: 老样子,把文件放置我们自己的驱动文件夹下面,然后右击,同步 scons 配置至项目: 因为这个驱动程序源码都给了,移植替换也不麻烦,所以简单看看: 1.2 按键测试使用方式我介绍按键的博文也说过,在这个应用上只使用了3中按键方式: 这里直接看下测试结果,按键正常: 按键移植成功,因为我们按键调用都使用的是开始已经创建好的看见线程,所以相对之前额外的内存占用是没有的,多的只是一个全局变量
二、定时器操作虽然按键也用到了定时器,但是那个定时器是专门给按键驱动用的,我们开始还初始化了一个定时时间1S的定时器,开始也测试过了。 在使用裸机的时候,需要一定时间周期性的进行某项工作,我们只能使用定时器,而用了操作系统,在单独的线程中直接使用操作系统的延时函数也可以达到效果。 在一般的应用,定时时间没有那么严格要求的时候,完全可以直接使用 但是复杂一些的应用,都使用 2.1 定时器逻辑添加我们需要给定时器创建一个计数的全局变量,然后到了一定的时间给需要执行任务的线程通知,这个通知我们新建信号量实现(虽然通知也可以使用全局变量),但是既然用了RT-Thread ,就把IPC机制用起来,这样保证良好的习惯也为以后做大的应用打下好的基础。 我们操作如下图所示: 所以我们原始的周期处理代码改成如下所示: 2.2 定时器测试测试也没什么,串口通讯接收报文也正常,今天改的按键和定时器也正常。 最后测试所有的功能和结果都正常: 三、时刻关注占RAM大小今天的工作做完,本应用篇也算完结了,最后还是要看一下占用RAM的大小: 最终的程序,运行时候需要占用 RAM的大小: 7456 字节,我们的芯片 RAM:8192字节。 最后大小说明从一开始,因为我们是在小内存的芯片上使用 RT-Thread ,所以每一篇每改一次代码博主都会记录内存使用大小。 最终程序我们上面记录需要使用的 RAM 大小为 7456 字节,实际上本次应用内存占用还有一定的优化空间的,比如主线程2K还是可以减少一点,按键线程其实不需要512字节等等。。。 但是因为本次应用也确实简单,而且内存也没到溢出的地步,所以就没有遇到瓶颈也就没有特意的花精力去处理每一个线程合适的大小。 其实在博文中,博主也经常说明一些影响内存的细节问题,希望看过我博文的小伙伴都有体会。 结语?? 博主希望大家都能够自己去掌握自己程序的内存。?? 掌握自己程序内存占用,首先要理解数据在芯片上的存放方式。 使用了操作系统,也得明白任务栈和系统栈的关系。对于每个线程,哪些操作需要占用内存都需要一定的了解。 对于基本的程序设计,也得明白 不同关键字修饰的变量存放的不同位置。 其实所有的这些博主在自己的博文中都有过说明,相信关注博主的小伙伴一定有所收获!
最后上一下工程源码链接:在STM32L051C8上使用 RT-Thread Nano 实例项目源码 好了,到本文为止,我们《RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread》系列也就算完结了。 希望小伙伴多多支持,多多指教! 谢谢! |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:53:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |