582|0

504

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

《嵌入式软件的时间分析》-第二章分享:告诉你如何正确的读定时器的计数器 [复制链接]

本帖最后由 qinyunti 于 2024-6-23 15:58 编辑

第二章分享

这一章介绍了处理器构造以及CISC和RISC以及CPU的通用寄存器,个人建议再对应到具体典型的架构来说更好比如ARM的。同时介绍了代码执行,存储,流水线,中断,数据一致性等概念,尤其数据一致性时嵌入hi开发中需要非常重视的。

 

 

这里

小贴士也很有工程实践意义,推荐驱动代码中都详细的进行类似的注释

 

 

 

以图像方式很形象的介绍了临界段问题的一个案例

用图形说话非常推荐,顺带提一句本书的图形都画的非常好,看起来都是作者自己画的而不是很多书籍都是直接截图或者各种复制的。

 

说到配图个人还推荐Micrium的文档里面的配图画的非常好,个人觉得是我看过所有书籍里面最好的,没有之一。

 

 

 

 

所以本书一定要仔细阅读,不要漏过任何章节,甚至任意一行,

比如以下的如何正确读取定时器的案例就非常有价值,经验丰富的嵌入式开发者就是不断积累类似经验而成长的。

 

 

 

书中介绍了硬件是如何通过shadow寄存器保证多字节访问时保持同步的,

比如定时器中读写计数器,如果做过嵌入式开发的比如stm32的看过手册的就可以看到各种shadow寄存器。

 

实际硬件没有保证同步,软件也是有处理方法的,

还是以上述读取定时器为例,由于高低字节必须分开读,

如果先读高字节再读低字节

比如读高字节时时间是0x00FF读出高字节是0x00,继续读低字节时间变了,变为了了0x0100,此时读到的低字节就是0x00,拼起来就是0x0000,所以读出来是错的。

先读低字节再读高字节也是类似的,比如开始是0x00FF读出低字节是0xFF,接着读高字节此时时间变为了0x0100,读出高字节是0x01,拼起来是0x01FF,读出来也不对。

解决方法是:

可以先读出高字节,再读出低字节,最后再次读出高字节,如果此时高字节和前面的高字节一样说明高字节没有变说明低字节没有进位,此此读出的高低字节拼起来即可。

如果此时高字节变了则需要重复上述过程。

 

 

此帖出自汽车电子论坛
点赞 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表