<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何保證MCU上電后RAM的初始值唯一?

如何保證MCU上電后RAM的初始值唯一?

作者: 時(shí)間:2019-01-03 來(lái)源:網(wǎng)絡(luò ) 收藏

  由于工作的原因,筆者經(jīng)常接到工程師詢(xún)問(wèn)內部的RAM上電之后的初始值到底是什么,有什么特性和規律。今天筆者就以使用RH850F1K的過(guò)程中遇到的幾個(gè)問(wèn)題與大家做一個(gè)交流。

本文引用地址:http://dyxdggzs.com/article/201901/396288.htm

  首先我們明確一個(gè)問(wèn)題,我們都知道,根據RAM的特性,每次上電之后RAM里面的值是隨機的。也就是說(shuō)RAM上電后的初始值可以是0xAA,也可以是0x55,也可以是其它任何的值,這個(gè)都是正常的。明確了這個(gè)基本原理之后,我們來(lái)看一下下面這個(gè)跟RAM的初始值的使用相關(guān)的一個(gè)問(wèn)題。

  最近有工程師在開(kāi)發(fā)的汽車(chē)娛樂(lè )系統中遇到了一種情況,就是他在使用RH850F1K的過(guò)程中,發(fā)現每次上電后RAM的值好像都是固定的。按照軟件設計的初衷,他想通過(guò)判斷RAM的值從而知道這次復位是掉電復位還是內部復位——比如“看門(mén)狗”復位。如果是掉電復位,則對RAM進(jìn)行初始化;如果是MCU內部復位,則不對RAM進(jìn)行初始化,從而可以保持用戶(hù)之前的一些設置,比如頻道、界面信息等。

  大致的設計思路和流程如下:

  MCU復位后,軟件會(huì )判斷某個(gè)變量的值:如果不是0x55,就認為這是上電復位,所有的RAM需要初始化,并把該變量的值寫(xiě)為0x55;如果是0x55,就認為這是“看門(mén)狗”復位,這時(shí)候則不改變一些變量的值,比如記錄里程相關(guān)的數據。相關(guān)的C語(yǔ)言代碼為:

  if (variable != 0x55)

  {

  初始化所有變量;

  variable = 0x55;

  }

  else

  {

  只改變部分變量的值;

  }

  在測試的過(guò)程中,測試工程師發(fā)現了一個(gè)問(wèn)題:對于99%的MCU來(lái)講,上述的邏輯都是沒(méi)有問(wèn)題的,但是對于個(gè)別MCU卻存在固定性的問(wèn)題。

  按照設計的初衷,本來(lái)我們認為上電后RAM的值是隨機的,但是對于某些個(gè)別MCU來(lái)講,測試工程師發(fā)現上電后RAM的值會(huì )固定的是0x55,或者出現0x55的幾率非常高。

  針對這個(gè)現象,筆者也從單個(gè)MCU的特性方面做了解釋?zhuān)菏紫任覀冞€是回到文章最初提到的問(wèn)題,根據RAM的特性,上電后RAM是任何值都是正常的,基于這個(gè)前提,我們可以說(shuō)測試工程師遇到的現象是正常的。那么為什么個(gè)別MCU的RAM上電后會(huì )偏向于某個(gè)特定值呢?我們知道半導體器件的設計是非常復雜的,外觀(guān)很小的一個(gè)都是內部數百萬(wàn)計的各種極其小的元器件搭建而成的,而這些的原材料基本都是硅。對于每個(gè)特定的而言,其特性數據都是有一些偏好的,也包括上電后RAM的初始值,所以當我們看每個(gè)MCU的電氣特性數據的時(shí)候,這些數據基本都是一個(gè)范圍值,而不是確定的值。

  另外,上面軟件本身的設計也是有缺陷的,或者說(shuō)魯棒性不好。假定上電后RAM的初始值是完全隨機的,那么這樣總會(huì )碰到隨機值恰好是0x55的情況?;谶@種考慮,我建議軟件工程師重新設計了判斷的條件。比如判斷RAM若干不連續地址的值,并且使用校驗的算法,比如比較簡(jiǎn)單的校驗和,這樣可靠性就大大提高了。

  筆者在工作過(guò)程中,曾經(jīng)多個(gè)客戶(hù)遇到過(guò)類(lèi)似的問(wèn)題,這個(gè)問(wèn)題也具有一定的普遍性,除了前面提到的汽車(chē)娛樂(lè )系統,在車(chē)身、儀表,甚至工業(yè)應用中的電表等都會(huì )涉及到,希望這篇文章能夠幫助設計工程師少走一些彎路。



關(guān)鍵詞: MCU 芯片

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>