您的位置 首页 应用

狼、羊、草过河与嵌入式固件更新

狼、羊、草过河问题(也有叫狼、羊、白菜过河之类的名字)是说:有一人带着一只部分驯化的狼(强调部分驯化是说明,人在场的情况下狼不会吃羊,不然要被指出逻辑漏洞了)、一只山羊和一些草来到河的左岸,欲乘一只很

  狼、羊、草过河问题(也有叫狼、羊、白菜过河之类的姓名)是说:有一人带着一只部分驯化的狼(着重部分驯化是阐明,人在场的情况下狼不会吃羊,否则要被指出逻辑缝隙了)、一只山羊和一些草来到河的左岸,欲乘一只很小的船过到河的右岸,每次人只能带其间一个过河,当有人在时,狼、羊、草都不会有事;当无人在时,就不答应狼羊在一起,也不答应羊和草在一起,问应怎么过河?

  这个相似智力测验的题能够有多种解法,例如最短途径之类的,乃至在许多场合被作为编程测验的问题。在此咱们不评论他们具体用什么办法过河,只需意识到其间的“山羊”是最要害因素,有必要把它和其它二者在人不在场的情况下阻隔起来就行了。问题的要害是为了安全可靠地完结作业,咱们往往需求采纳一些额定的举动。

  在嵌入式体系的固件更新中,为了安全地烧写Flash中的内容,咱们也需求运用相似的一些手法。更新Flash中的内容的进程自身并不杂乱,只需擦除扇区中的内容,将新的代码下载到一个暂存空间,然后调用烧写函数,例如调用一些API,将暂存的代码写入扇区,再从头上电即可;实践的体系中,咱们一般用RAM来作为暂存空间。这个进程看似简略,却有一些细节上的困难问题,例如:假如旧代码正在RAM中运转,把新代码存到RAM里将呈现不可思议的行为,乃至是灾祸(例如控制板用在强电场合)。此外,暂存代码的进程需求RAM空间满足大,然后能够把新代码放在未运用的地址中。但是在实践的体系中咱们也能够常常发现,往往旧代码在编译的时分就现已正告RAM里边这段空间不行,那段空间不行了,哪里还有满足的空间去暂存至少和旧代码相同规划的新代码呢?

  这时分咱们的期望便是运用体系中的缓冲区了,例如在运用TI的CCS软件的时分,为了观测一些变量,咱们会在内存中拓荒一些缓冲区存储这些变量,然后能够在Graph窗口或许其他当地实时调查它们,这些缓冲区往往包括很多的地址空间(例如4*0x400的地址规模)。已然咱们要烧写新代码了,那旧的代码里边待观测的变量天然也行将失掉含义,能够将它们运用的空间给占用掉了。在这个装载程序的进程之前,首先要屏蔽运用这些缓冲区地址的中止,否则又要发生各种无法意料的古怪成果了。

  但是在这一进程中,也存在一些异常情况,例如新代码部分损坏(例如OMAP芯片的烧写就能够包括DSP部分的bin和ARM部分的bin,包括的器材越多,文件越多,失利的概率越高)、通讯过错(乃至有极点情况,例如不小心把通讯电缆给碰掉了)、暂存空间被意外损坏等情况(例如运用U盘去晋级BIOS时,U盘被意外拔掉了)。所以在RAM中的暂存代码被烧入FLASH空间之前,还要有代码的校验作业,这样只需新代码存在校验过错,它就不会被用来代替旧代码,咱们虽然会看到“烧写失利”的提示,至少对体系自身没有发生任何损坏,只需从头上电,然后体系主动加载旧代码就能够了。

  最终阐明,这儿的一些思路是从O’REILLY出书的《Making Embeded Systems》一书里边提炼的。这是本解说适当透彻的书,主张我们抽暇读一读。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/118423.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部