nmg 发表于 2024-7-29 19:41

《嵌入式软件的时间分析》书友问答接龙 第六集:软件时间问题案例

<p><strong><img file="" height="52" initialized="true" inpost="1" lazyloaded="true" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" zoomfile="" />看目录,其中有一个案例是:<span style="color:#1abc9c;">&ldquo;时间分析使得车厂节省了1200万欧元&rdquo;,真真是体现了时间就是金钱这句话~</span></strong></p>

<p>包括的案例:</p>

<p>- 中断都是哪来的?<br />
-&nbsp;OSEK ECC:并非选择<br />
-&nbsp; 重置17 min后发生偶发崩溃<br />
-&nbsp;遗漏及重复的传感器数据<br />
-&nbsp;拉着手刹去比赛<br />
-&nbsp;实际测量得到的 WCET 比静态代码分析得到的更大<br />
-&nbsp;有时候网络管理报文来得太早了</p>

<p>- 系列项目中无间断的时间分析<br />
-&nbsp;时间分析使得车厂节省了1200万欧元</p>

<p>&nbsp;</p>

<p><strong>《嵌入式软件的时间分析》的书友们(<a href="home.php?mod=space&amp;uid=1401067" target="_blank">@luyism </a> 、<a href="home.php?mod=space&amp;uid=108278" target="_blank">@常见泽1 </a> 、<a href="home.php?mod=space&amp;uid=427606" target="_blank">@数码小叶 </a> 、<a href="home.php?mod=space&amp;uid=782751" target="_blank">@hehung </a> 、<a href="home.php?mod=space&amp;uid=323615" target="_blank">@qinyunti </a> ):</strong></p>

<p>需<span style="color:#1abc9c;">在本周内阅读完书籍的第六章节 软件时间问题案例</span>,跟帖参与问答接龙互动:</p>

<p>(1)第一位跟帖发起本章问题,第二位解答第一位发起的问题,第三、四位继续问答接龙;</p>

<p>(2)最后一位是章节总结角色,以文字或者思维导图的形式,对本章进行总结。至此章节互动结束。</p>

<p>&nbsp;</p>

<p><span style="color:#e74c3c;">注意:发起的问题,对解题者理解、学习本章内容有切实意义;发起的问题不可重复。</span></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<div style="overflow-wrap: break-word; color: rgb(51, 51, 51);Microsoft yahei&quot; letter-spacing: normal; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; background-color: rgb(255, 255, 255)">
<p style="overflow-wrap: break-word"><strong style="overflow-wrap: break-word">活动交流群</strong></p>

<p style="overflow-wrap: break-word">论坛有开设汽车电子交流群,欢迎感兴趣的小伙伴,微信添加&ldquo;helloeeworld&rdquo;为好友,对话:加入汽车电子交流群,入群交流。</p>

<p style="overflow-wrap: break-word"><img _height="416" file="" initialized="true" inpost="1" lazyloaded="true" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" src="https://6.eewimg.cn/news/statics/qrcode/helloeeworld.png" style="overflow-wrap: break-word; border: 0px solid; max-width: 600px; width: 150px;" zoomfile="" /></p>

<p style="overflow-wrap: break-word">扫码,对话:加入汽车电子交流群。</p>
</div>

数码小叶 发表于 2024-7-29 21:30

<p>网络管理报文是周期报文,且有冗余,为什么还会发生来得太早了现象?</p>

luyism 发表于 2024-7-30 13:32

数码小叶 发表于 2024-7-29 21:30
网络管理报文是周期报文,且有冗余,为什么还会发生来得太早了现象?

<p>这个问题挺有意思的,在以前没接触汽车整体系统之前确实没有想到过还会又这种隐蔽的情况出现,现在我就书里的内容简单做一下解释:</p>

<p>网络管理报文是周期性发送的,即它们按照一定的周期重复发送,例如每10毫秒发送一次。此外,这些报文还具备冗余机制,即如果有丢失或损坏的情况,会有备用报文来确保数据的完整性和可靠性。然而,在这个案例中,尽管有这些机制,报文仍然有时会提前发送。</p>

<p><strong>问题原因:</strong></p>

<ul>
        <li>当系统从一种应用模式切换到另一种应用模式时,任务的调度可能会受到影响。在不同的应用模式下,系统的行为和任务调度可能会有所不同。例如,当从驾驶模式切换到停车模式时,上一个模式的最后一次任务调用与下一个模式的第一次任务调用之间的时间间隔可能会比预期短,导致报文提前发送。</li>
        <li>在本案例中,应用模式切换时,上一个应用模式的最后一次调用与下一个应用模式的第一次调用之间的时间间隔过短,仅为3毫秒,而不是预期的10毫秒。这意味着周期性的报文发送发生了偏差,导致报文提前发送。</li>
</ul>

<p><strong>举个栗子:</strong></p>

<p>假设在一个汽车电子控制系统中,网络管理报文需要每10毫秒发送一次,允许的时间偏差为1毫秒。现在,系统从驾驶模式切换到了停车模式。在驾驶模式下,最后一次任务调用是在t=9毫秒时完成的,而停车模式下的第一个任务调用计划在t=10毫秒时开始。</p>

<p>按照正常的情况,第一次报文应该在t=10毫秒时发送,第二次报文应该在t=20毫秒时发送。但是,由于应用模式切换的机制,实际上驾驶模式下最后一次报文发送在t=9毫秒时完成,停车模式下第一次任务调用在t=12毫秒时就开始了。这意味着停车模式下第一个周期性任务(即发送第一个报文的任务)在t=12毫秒时启动。</p>

<p>让我们更清晰地区分各个概念:</p>

<ul>
        <li>
        <p><strong>上一个应用模式的最后一次任务调用</strong>:</p>
        在t=9毫秒时完成,这是驾驶模式下的最后一次任务调用,它负责发送本模式最后一个报文。</li>
        <li>
        <p><strong>下一个应用模式的第一次任务调用</strong>:</p>
        在t=12毫秒时开始,这是停车模式下的第一次任务调用,它负责发送第一个报文。</li>
</ul>

<p>于是在这种情况下网络管理报文本应该每10毫秒发送一次,但因为任务模式间切换,他们之间的报文间隔小于10ms。</p>

<p>为了解决这个问题,开发人员在新的应用模式中增加了7毫秒的任务偏移。这意味着模式切换后第一个周期性任务的启动时间被推迟了7毫秒,在这个例子中即第一次任务调用在t=19毫秒时开始,而不是t=12毫秒。</p>

<p>附一张书本样图:</p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>

hehung 发表于 2024-7-30 14:04

<p>6.4章节,遗漏及重复的传感器数据中,CAN报文周期设置为了10ms接收一次,为什么还会出现CAN报文时不时丢失的问题,而且不同的ECU报文丢失的时间间隔还不相同?</p>

常见泽1 发表于 2024-7-30 20:23

hehung 发表于 2024-7-30 14:04
6.4章节,遗漏及重复的传感器数据中,CAN报文周期设置为了10ms接收一次,为什么还会出现CAN报文时不时丢失 ...

<p>报文每10ms接收一次,肯定会存在抖动。意味着有时候不到10ms会接收到报文,有时也会超过10ms。当发生错误时进行了计算,然后立即接收到报文,之后在大约10ms后再次接收到报文,最终的计算结果将使用最新的值,而不会使用之前接收的值,就是丢失的数据包</p>

qinyunti 发表于 2024-8-2 21:57

<p>6.5 拉着手刹去比赛,举了一个有趣的例子,由于项目复杂且从闪存执行大量代码导致速度变慢导致功能异常,使能了Cache之后速度加快功能正常了。</p>

<p>其实对于嵌入式开发来说,这里隐含着一个非常需要重视的问题,即事物的正反面,使能了Cache虽然大大提高了性能,但是必定导致数据一致性的问题,应用开发就需要处处关注,是否存在一致性问题,一致性问题很可能导致很多隐蔽难以发现的问题。这就是嵌入式开发中需要处处关注并且最终权衡选择的。</p>

<p>包括存储需求-性能的权衡,可移植性-复杂性的权衡,时间换空间,空间换时间等等。</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: 《嵌入式软件的时间分析》书友问答接龙 第六集:软件时间问题案例