鱼鹰谈单片机

其他

线程CPU使用率到底该如何计算?

0,这肯定是我们不希望看到的。然后再说一个点,为了简化代码(钩子函数代码只有短短几行),鱼鹰这样的实现是有两个问题的。1、首次运行计算有误,因为静态变量应该在运行任务之前就初始化的(不应该初始化为
2020年6月1日
其他

许久以后,你会感谢自己写的异常处理代码

END-如果对你有帮助,记得转发分享哦微信公众号「鱼鹰谈单片机」每周一更单片机知识长按后前往图中包含的公众号关注
2020年5月24日
其他

实操RT-Thread系统CPU利用率功能添加

下如何准确测量代码执行时间?》大概计算线程执行时间:1.59毫秒,10毫秒执行周期,如果只有这个任务执行,大概1.59/10=15.9%(准确计算应该是
2020年5月17日
其他

单片机里面的CPU使用率是什么鬼?

END-如果对你有帮助,记得转发分享哦微信公众号「鱼鹰谈单片机」每周一更单片机知识长按后前往图中包含的公众号关注
2020年5月10日
其他

代码写完了,你要花多少时间测试?半小时足矣!

的缓存地址你没有进行初始化就直接拿来用了,如果是鱼鹰设计的程序,利用前面鱼鹰给道友准备的断点设置知识点,在调试模式下,程序会自动在这个函数停止执行:这样只要一运行没有初始化的代码,KEIL
2020年4月19日
其他

困惑多年,为什么 printf 可以重定向?

这个东东了不得啊,很多C语言属性都能修改,功能实在是太强大了,强大到鱼鹰自认为掌握得不错的C语言都还只是基础,也就只配在小白面前嘚瑟一下。言归正传,为了突出重点,今天只讲
2020年4月12日
其他

KEIL 下如何准确测量代码执行时间?

不能准确显示时间,而是没有设置准确。那么到底怎么设置呢?鱼鹰想到了《STM32调试利器之ITM》笔记中有一个关键的操作,就是设置内核时钟频率。所以鱼鹰把默认的10
2020年3月29日
其他

【深度长文】还是没忍住,聊聊神奇的无锁队列吧!

t就解决了大量数据拷贝问题。而这个拷贝思想如果能运用在块存储设备,那么将极大简化代码。那么我们来看看无锁队列是如何实现的。首先上代码(鱼鹰为了方便说明和测试,未提供完整函数,这个可后台领取)://
2020年3月22日
其他

如何获得更多鱼鹰个人原创笔记?

因公众号发展需要,也为了防止伸手党,鱼鹰对于鱼鹰未公开原创笔记或鱼鹰参考代码等资源的获取进行了条件限制。条件如下首次关注本公众号的道友可直接选择一份限制资源自行领取微信公众号「鱼鹰谈单片机」长按后选择前往图中包含的公众号关注首次添加鱼鹰为微信好友的道友可再选择一份限制资源自行领取鱼鹰微信号「EmbeddedOsprey」长按后选择打开对方的名片添加鱼鹰为好友关注一个月以上的道友每次公开新资源关键字时,如果在此之前存在以下支持本公众号行为的转发文章数。认为文章不错,自主分享到朋友、朋友圈、群聊或QQ群等
2020年3月17日
其他

终极串口接收方式,极致效率

时表示接收完成,DMA自动关闭。好好理解一下,实现起来不难。
2020年3月9日
其他

鱼鹰公众号进阶笔记汇总

这是一篇汇总文,虽说是汇总吧,其实也不算,只是为了吸引你关注本公众号罢了。事实上本公众号的文章基本上都在菜单栏里面进行分类了,鱼鹰太懒,就不一一整理了只列一些个人觉得不错的笔记放在这里吧(事实上公众号的笔记基本上都是干货,就怕你经验不足,看不懂),如果觉得有收获,就来关注鱼鹰吧!延时功能进化论(合集)指针,很难吗?|
2020年3月6日
其他

延时功能进化论(合集)

如果觉得文章对你有帮助,欢迎转发、分享给朋友,感谢你的支持!
2020年3月2日
其他

指针,很难吗?| 解析指针的过程与意义(一)

这篇笔记修修改改不知道多少次,原以为能比较快就能写好的,但事实上花了好几天才写完,因为鱼鹰要尽可能的将故事贴合实际的
2019年11月24日
自由知乎 自由微博
其他

如何写一个健壮且高效的串口接收程序?

另外,不知道你是否观察到图中的每个数据帧占用的时间是不一样的,这是因为每个数据帧不可能都是一样长的,它们是不定长的数据包,所以你的定时不能从发送开始定时,而是从发送完成后开始定时控制空闲时间。
2019年10月8日
其他

今天,你的栈溢出了吗?

导读:在C语言的世界里,栈的地位非常举足轻重,许多错误都可能和栈设置有关,那么该如何确定栈的大小?今天分享一点栈知识,帮助你确定栈的大小,参考链接请点击下方的阅读原文。其实很多编译工具是可以获取函数调用信息的,比如:KEIL
2019年8月18日
其他

固件升级经验总结

导读:上面理论+实践当初花了3天时间弄完的,但是,当你真正做项目的时候,你会发现,只有上面的这些知识还不够,还有更多的细节要去处理:1.
2019年7月7日
其他

引脚输出的隐藏BUG | 深入思考

由此展开思考,凡是有可能被多个任务(或中断)使用的资源,不管是一个寄存器,还是一个字节变量,都一定要考虑使用的风险,把它当成互斥资源来看待,这样才能让你自己用的放心,也不会被后来者暗中骂娘了。
2019年6月18日
其他

佛祖保佑,永无 BUG,永不修改 | KEIL 调试系列总结篇

这张图清楚的告诉你任务运行周期、任务最大最小执行时间等系统关键信息(事实上还能看CPU使用率,栈使用率等情况的,但因为时间原因并没有花时间研究,但后期肯定会补上这部分内容的,到时候看公众号就行)。
2019年5月18日
其他

KEIL中的配置向导(Configuration Wizard)怎么用?

http://www.keil.com/support/man/docs/uv4cl/uv4cl_ut_configwizard.htm
2019年5月12日
其他

信号量保护之禁止中断

1、操作的对象是共享资源(全局变量),其他任务可能在整个操作流程中打断你的操作,并且会更改你的全局变量,最终会引起非常严重的后果的情况下需要关中断。
2019年5月4日
其他

信号量保护之位带操作

----------------------------------------------------------------------------------更新2018/08/23
2019年5月4日
其他

KEIL 调试的 ini 文件有什么用?

当你编写完毕之后,就可以使用那个按键编译,编译结果将显示在下面的小框里面,注意如果有多个错误,需要一个一个排除;另外还要注意的是,指针的使用必然会报错,因为它毕竟不是真正的
2019年5月4日
其他

KEIL调试为啥不创建一个自定义按键?

保存文件后,将其添加到工程中,这里我采用模拟的方式,所以在模拟中添加,如果你是在线调试,那么在另一个位置添加即可:
2019年4月27日
其他

打了多年的单片机调试断点到底应该怎么设置? | 颠覆认知

到此,断点窗口(前期我叫它数据观察点,我也不知道从哪看到的这个词,后来觉得还是断点窗口比较准确)的内容就结束了。这个小节内容对于调试而言绝对是一大利器,也是鱼鹰决定写这个KEIL
2019年4月20日
其他

你知道 KEIL 自带示波器吗?

最后就是窗口的使用了,将光标点(不是移)在窗口上,鼠标滚轮移动可以调节波形大小,左击波形的某个位置,再点击移动光标置另一个位置,就会显示时间差和频率。可以放大后再确定位置。
2019年4月14日
其他

Peripherals显示空白?

系列工程的时候也发现了需要设置这一步,但是我发现没有设置这一步的情况下也能使用,所以以为这一步没用,知道此时才发现有些时候确实需要的。
2019年4月6日
其他

外设寄存器该这么看才对嘛

你的中断设置的优先级是多少,是否开启了,是否挂起了,是否处于活动状态,在这里一目了然。当然这里只是简单介绍,其它更多内容自己去看咯,比如你设置的中断分组情况,中断向量表偏移等内容都可以在这里查看。
2019年4月6日
其他

NRF24L01+中文翻译之器件总体介绍(一)

导读:对于初学者来说,最痛苦的莫过于看英文技术手册,所以当初小白的自己就会想,要是有人将这些手册翻译成中文就好了。但是对于高手而言,他又不屑于翻译手册,因为他直接就能看懂,根本不需要翻译。所以在寻找
2019年3月31日
其他

C语言之结构体(struct)

--------------------------------------------------------------------------------------2018/12/11
2019年3月31日
其他

KIEL 调试那些事儿之窗口展示——变量(二)

以上数据查看都有一个特点,那就是数据的地址都是固定的,这样通过地址就能知道你的数据是什么,但还有一种数据,只会在函数运行的时候才会创建,一旦函数运行完,变量空间也就消失了,这就是局部变量。
2019年3月30日
其他

C语言之 static

包含这个头文件的时候都会产生一个变量,虽然它们的名字相同,但是它们内存位置却是不同的,比如张三这个名字,虽然都叫张三,但可能他们不是同一个人,所做的一些行为也就不一样了。
2019年3月30日
其他

KEIL调试那些事儿之基础调试(一)

文件切来切去,发现不知道现在的代码运行到哪里去了,怎么办?那试试这个光标。即使你把当前运行代码的源文件关闭了,使用它之后也会自动打开源文件,然后定位光标,相当方便。
2019年3月23日
其他

为什么说你一定要掌握 KEIL 调试方法?

函数的方式将数据打印至串口调试助手调试,但无一例外的是,这些方法都要在合适的地方插入合适的代码才行,而且还有可能因为插入了这些调试代码而导致本来没有问题的程序出现了问题,这都是有可能的。
2019年3月23日
其他

C 语言的程序怎么烧进 STM32 里?

昨天加了一整天班,然后因为时间仓促,没时间更新内容,所以今天就将以前在别的平台的回答贴一下咯,不过对你们应该有点帮助的。
2019年3月17日
其他

不会printf怎么打印红外遥控数据?| 初学者必看

前段时间有位道友问我关于红外遥控数据接收的问题。接收数据的那部分代码因为用的开发板例程,所以一定程度上可以保证接收是没有问题的,但是他的主函数很简单,为什么还是出错了呢?
2019年3月9日
其他

器件通信协议系列文章之 I2C

输入输出方向,输出采用推挽输出,输入使用上拉输入即可。注意使用转换方向的方式时必须先转换方向之后才开始释放总线。支持多主控,但是同一时间只能有一个主控。每个设备都有自己的设备地址(共
2019年3月3日
其他

巧用位运算

了。看到这里希望各位同学别一脸懵逼啊(虽然当时我也是如此,囧)。其实只要理解了其中的含义,就很容易写出这样的表达式了,也很容易看懂。借此稍微讲讲指针的知识,该部分会在指针小节中进行比较详细的说明。
2019年3月3日
其他

数据传输还用 CPU?不如交给 DMA 吧!

了,所以硬件自动进行刷新工作,并且关闭数据流,如果下次要接收的话,就要重新打开了。不过这里有一个双缓冲模式,启用他的话,它就不会关闭数据流,而是继续工作,不过这次工作的目的地换了一个地方了。
2019年3月3日
其他

入门 uCOS 操作系统的一点建议

当有一定概念之后,就可以开始阅读代码了,从系统初始化、新建任务、系统开始三个函数开始入手。这里面又会涉及大量的指针、结构体,其中又会涉及单向链表、双向链表知识。这些知识慢慢掌握就可以。u/COS
2019年3月2日
其他

数据结构系列文章之队列 FIFO

-----------------------------------------------------------------------------------------2018-08-08
2019年3月2日
其他

uCOS II 系列文章之就绪表

,即一个任务只有唯一的一个优先级并且这个优先级对应着该任务,知道优先级,就知道了是哪个任务。她们是一一对应的关系。
2019年3月2日
其他

STM32固件升级之基础知识(一)

为什么说是默认呢?这是因为如果没有特殊要求的话很少会去改中断向量表。实际上这个中断向量表是可以更改的。但是在更改向量表之前必须在地址开始处建立一个向量表,因为在复位后,程序默认(硬件决定的)从
2019年3月2日
其他

STM32工程模板建立之 KEIL 开发平台设置(一)

平台的显示效果还是比较好的,但是在删除中文字符时,需要删除两次才能删除一个中文字符,显然是一件很麻烦的事情,而且很多时候换平台的时候或者移植别人的代码时,经常出现乱码的情况。所以我的建议是使用
2019年2月26日
其他

STM32工程模板建立之 FLASH 目标(四)

勾选(再介绍一下另外几个选项:是否总是编译、总是不编译、改变时编译。如果有工程比较庞大,编译速度很慢,而有些代码一般情况下是不修改的,如官方库函数,此时也可以去掉
2019年2月26日
其他

STM32工程模板建立之新建工程(二)

的软件仿真功能还是非常强大的,在没有实际硬件的情况下,用它来进行一些和实际硬件无关的代码编写还是很有必要的。
2019年2月26日
其他

C语言系列文章之volatile

除了硬件寄存器,还有多线程共享的变量和中断服务程序的使用变量,它们都是类似的道理,都是在一个函数中可能不改变,而在其他函数(中断处理函数或者其他线程的函数)可能改变的情况,如果不声明
2019年2月21日
其他

C语言之类型定义(typedef)

关键字可以用于给数据类型定义一个别名,比如说你本名叫关谷神奇,我嫌弃这个名字太长了,所以给你取一个别名,叫关谷,以后我叫关谷的时候你就知道在叫你了。
2019年2月19日
其他

C语言之const

那么有没有办法找到这个拷贝源头呢。之前我说过,先前能找到拷贝的源头纯属偶然,有没有什么方法可以找到呢?这其中的难点就是进入
2019年2月19日
其他

STM32调试利器之ITM

中输入数据时,每输入一个数据,都会实时传输到这个变量当中,单片机就从这个变量获取键盘数据(这个变量的数据写入应该是通过
2019年2月17日