《嵌入式软件的时间分析》一:前2章读后感
本帖最后由 数码小叶 于 2024-6-30 11:06 编辑<p><span style="font-size:16px;">在没拿到这本书之前,认为这本书之所以这么贵,可能是因为内容,拿到手后,发现不仅是内容,这本书的质感真的很意外,首先是封面,采用硬纸壳设计,并且内页通过线固定,像字典给人一种结实耐用的印象,可以反复查阅。</span></p>
<div style="text-align: center;">
<div style="text-align: center;"></div>
<p> </p>
</div>
<p> </p>
<p><span style="font-size:16px;">第二点,就是他的内部印刷,居然是彩色印刷,已经很多年没阅读到过彩色印刷的书籍资料了<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" />。</span></p>
<div style="text-align: center;">
<div style="text-align: center;"></div>
<p> </p>
</div>
<p> </p>
<div style="text-align: center;"></div>
<div><span style="font-size:16px;">在看流程图、时序方面,彩色直观明了,黑白的只能明暗来区分,细节没彩色多。</span></div>
<div style="text-align: center;"> </div>
<p><span style="font-size:16px;"> 第一章,作为基础知识的介绍,从V模型入手,介绍软件开发的整个过程,从而引入每个环节的时间分析,为后续章节铺垫。借鉴V模型的从抽象到具体,过渡到可执行文件的生成过程。这部分内容将从.c文件到可执行文件的步骤,描述的是言简意赅,读起来,感觉没有一点点是多余的。虽然这个步骤之前已经了解过,但还是有部分不知道的。比如链接器部分,对于函数和变量的解析、索引,一个文件和多个文件的变量定义以及引用,之前都是从报错上解决,但根本原理了解后,更加豁然开朗。本章最后,介绍了一下调试器,拿一个调试界面介绍了调试过程中常见的一些关注点和调试手段。最后诙谐的介绍了“Bug”、“Debugger”、“ELF”等词汇。</span></p>
<p><span style="font-size:16px;"> </span></p>
<p><span style="font-size:16px;"> 第二章--处理器的基础知识,从处理器的构造、代码执行、存储器寻址、访问、缓存、流水线、中断几个方面来介绍,从结构搭到数据存储访问,如果只从嵌入式来考虑,这部分内容,可以只是了解了解,现在的MCU原厂提供的底层lib库基本已经把这些抽象解决了,很少有机会需要更改。如果汇编学的好,这部分内容就更容易理解了。在第二章中,觉得平时最有用的就是2.3存储器寻址及其模式这一节中介绍的区段使用,在日常开发中,自定义区段,来快速保存和读取数据很实用。后面介绍了数据访问时的CPU数据模型,详细讲解了访问时造成的开销以及优化模型。有一句话总结的很好:“过分强调最大限度地提高平均计算能力,可能会导致最坏的情况,即不能满足强实时系统的需求。</span></p>
<p> </p>
<p><span style="font-size:16px;"> 前两章,要说没有弄懂的地方,就是流水线小节,提到的分支预测单元机制,该机制的原理是什么?为何可以提高代码执行效率?前两章,对于本书的主题-"时间",没有很深的涉及,却时不时的提出延伸,会在后面的章节具体介绍,应该在读完后续章节,会有更好的收获。</span></p>
<p> </p>
<p> </p>
<p>彩色印刷估计也不少成本,期待后面章节的观后感。</p>
<p>彩色印刷给人高大上的感觉呀。。。。。。继续等更。。。</p>
<p>彩色印刷点赞,不过内容没有很多彩图吧,其实黑白就能讲清楚</p>
<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" />呼叫书友们来讨论:<span style="color:#2ecc71;">“前两章,要说没有弄懂的地方,就是流水线小节,提到的分支预测单元机制,该机制的原理是什么?为何可以提高代码执行效率?”</span></p>
<p> </p>
<p><strong><a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=1401067" target="_blank">@luyism </a> <span style="color:#1abc9c;">、</span><a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=108278" target="_blank">@常见泽1 </a> <span style="color:#1abc9c;">、</span><a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=782751" target="_blank">@hehung </a> <span style="color:#1abc9c;">、</span><a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=323615" target="_blank">@qinyunti </a> </strong></p>
<p>分支预测,简单来说,是个聪明的“猜谜游戏”。处理器在执行代码时,常会遇到“分支”指令,就像路上的岔路口,决定程序接下来要执行哪段代码。分支预测单元就是负责在真正知道答案前,先猜一下分支会怎么走。</p>
<p>它的原理基于几个策略:</p>
<ol>
<li>
<p><strong>历史记录法</strong>:就像你记得上班路上哪个红绿灯经常是绿的一样,分支预测器会记住过去分支指令的走向,如果一个分支总是转向某一边,预测器就倾向于认为这次也会一样。</p>
</li>
<li>
<p data-spm-anchor-id="5176.28103460.0.i4.297c3da2VzbIGu"><strong>模式识别</strong>:预测器还会分析程序的执行模式,比如循环结构中分支的规律,用这些模式来提高预测准确性。</p>
</li>
<li>
<p><strong>复杂算法</strong>:更先进的预测器会用更复杂的算法,比如统计方法,甚至机器学习,来综合分析多种因素,做出预测。</p>
</li>
</ol>
<p data-spm-anchor-id="5176.28103460.0.i3.297c3da2VzbIGu">为什么这能提高效率呢?因为在处理器的流水线作业中,一旦遇到分支,如果不做预测,就需要等待实际分支结果确定后再继续取指令执行,这会导致流水线“停摆”,白白浪费了宝贵的时钟周期。有了分支预测,处理器可以“大胆假设”,提前加载可能需要的后续指令到流水线中执行。如果预测对了,就节省了时间;即使偶尔预测错了,虽然需要清理错误的指令重新来过,但总体上还是大大提高了执行效率,毕竟多数情况下我们是能猜对的。</p>
luyism 发表于 2024-7-1 11:22
分支预测,简单来说,是个聪明的“猜谜游戏”。处理器在执行代码时,常会遇到“分支” ...
<p>感谢解惑<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /></p>
页:
[1]