Sliverwave四旋翼固件分析.三(蜂鸣器驱动)
Beecore Lite Silverware 有刷飞控.源码解读1
36元空心杯飞控Beecore Lite(Silverware固件)
先看驱动,后看逻辑的写作。
先把蜂鸣器的开关函数封装成宏,然后也可以使用条件宏做开关
1.宏函数会在编译预处理时展开,只占编译时间,函数调用则会占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏会较慢。
2.在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。
3.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
4.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。
其实我觉得宏函数在嵌入式里面,至少在这里就是为了代码的美观罢了。性能是有些浪费的。
清楚位置,就是控制的这个BRR的寄存器
库函数的每一个都是要校验传入的函数的
这里是设置蜂鸣器的IO
对蜂鸣器的IO进行设置
注意设置的顺序是按照IO结构体的构造顺序
库函数初始化的样子
return 1 我不是很懂
我们看看是什么
都是接收协议里面的值
SBUS
看这些变量的地方
先不急,这里
因为蜂鸣器和编程的IO是复用,这里就要设置一个延时的时间
一开始的设置通道的个数
定义在此
这个时间更新的函数写到对应的驱动再说
把更新的时间写到time里面
接着进来就是对应不同状态的声音频率
低的信号发射水平或者低电量,这个延时时间是浮点数的大数
如果上面的情况都没有出现,就是低电量什么的.开始准备启动蜂鸣器,就是叫的值现在已经装载了。
如果成功的初始化会返回一个1,这里就空了
这个是蜂鸣器声音的计算
下面就是反复的使用宏封装的函数乱叫。
如果上面的常数没有装载成功,那就直接关了蜂鸣器
最后把函数封装一下
这个简单的实现,没有什么好说的。
今天坐上特斯拉了!
坐过很多的电车了,还是感觉特斯拉的车可能真的是做出了不一样的感觉
哈哈哈,这个是我除了吹特斯拉的哨子以外目前唯一和特斯拉的交集辽~
https://blog.csdn.net/Monster_ii/article/details/77089651
相关文章
- Servlet 简介
- Scala 文件 I/O
- Web 词汇表
- XML 总结
- Scala 安装及环境配置
- Servlet 表单数据
- C 标准库 – 参考手册
- LeetCode 212. 单词搜索 II -- 字典树+dfs
- 智能催收系统中自然语言理解模块设计
- 【网页设计】期末大作业:化妆品主题——绿色大气的html5响应式化妆品护肤品肌肤网页设计(11页)
- sed学习与实践1:sed基本指令
- selenium 自动化测试
- 【canvas教程】实现画布拖动、定点缩放,支持手势与鼠标滚轮操作
- 13.2 GAS与属性
- 论文阅读笔记《Deep Learning of Graph Matching》
- C语言学习之路(基础篇)—— 数组和字符串 02
- 人工智能2021年10大应用
- JUC-原子操作类之18罗汉增强
- 浅析量化交易程序化的优势
- 1. 微服务之Eureka服务注册发现