專利名稱:一種單片機系統(tǒng)map數(shù)據(jù)標(biāo)定方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種MAP數(shù)據(jù)標(biāo)定方法,特別是關(guān)于一種用于小容量RAM單片機系統(tǒng)中的MAP數(shù)據(jù)標(biāo)定方法。
背景技術(shù):
在汽車電子領(lǐng)域,嵌入式系統(tǒng)大都使用單片機作為控制核心。由于控制系統(tǒng)的復(fù)雜性和對象的多樣性,單片機系統(tǒng)中有大量的參數(shù)無法在系統(tǒng)設(shè)計時確定,需要在系統(tǒng)開發(fā)完成后通過匹配標(biāo)定來確定。而這種匹配標(biāo)定,往往是利用PC機上的標(biāo)定工具軟件,通過基于總線的協(xié)議與單片機系統(tǒng)建立連接,將標(biāo)定工具軟件上的操作,傳送給單片機,由單片機完成相應(yīng)的操作。在單片機內(nèi)的FLASH上,保存有這些需要標(biāo)定的參數(shù)即MAP的初始值;通過基于總線的協(xié)議接收標(biāo)定工具軟件的操作,對MAP進(jìn)行數(shù)據(jù)更新;由于FLASH中的數(shù)值只能通過FLASH編程軟件才能更新,而在運行FLASH編程軟件的時候,一般不能同時執(zhí)行讀取FLASH的程序,需要停止正常程序的運行,進(jìn)入專門的FLASH編程模塊,因此這種方式無法支持MAP的在線標(biāo)定;針對這個問題,目前常用的解決方案是把MAP數(shù)據(jù)從單片機內(nèi)的FLASH中拷貝到單片機內(nèi)的RAM中,在線標(biāo)定的時候,修改的是RAM中的MAP數(shù)據(jù),通過數(shù)據(jù)查詢函數(shù),檢測到MAP數(shù)據(jù)修改后的結(jié)果。但是,這種方法也有缺陷由于單片機片內(nèi)的RAM容量往往很小,而一些嵌入式系統(tǒng)中需要標(biāo)定的MAP很多,例如發(fā)動機的控制系統(tǒng)ESP、變速箱的控制系統(tǒng)ABS和汽車動力學(xué)控制系統(tǒng)TCS等,往往無法把所有的MAP數(shù)據(jù)從單片機內(nèi)的FLASH中全部拷貝到單片機內(nèi)的RAM中。目前,對此常用的解決方法有兩種 一是在單片機的外部擴展RAM用于標(biāo)定,這需要在單片機管腳上把地址總線和數(shù)據(jù)總線引出,占用了大量的管腳資源,而且會使系統(tǒng)的電磁兼容性惡化,增加系統(tǒng)成本;二是通過分塊標(biāo)定,把所有的標(biāo)定MAP分塊,一次標(biāo)定只把一塊區(qū)域的MAP數(shù)據(jù)拷貝到單片機內(nèi)的RAM 中,因此一次只能標(biāo)定一塊區(qū)域內(nèi)的MAP數(shù)據(jù),這種方法局限性很大,事先無法確定一次標(biāo)定需要修改多少MAP,在MAP分區(qū)的時候也就無法選擇一種適應(yīng)整個標(biāo)定階段的劃分方法, 并且需要在多個標(biāo)定頁之間來回切換,而對于這種在線切換,會將先前進(jìn)行的標(biāo)定工作丟失。
發(fā)明內(nèi)容
針對上述問題,本發(fā)明的目的是提供一種能夠較好地支持單片機系統(tǒng),特別是小容量RAM單片機系統(tǒng)在線標(biāo)定的單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法。為實現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法, 其特征在于它包括以下步驟1)在單片機內(nèi)存中設(shè)置若干個區(qū)域,包括以下步驟①根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定FLASH ;②根據(jù)一次能夠標(biāo)定的MAP數(shù)據(jù)量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定RAM ;③根據(jù)MAP的個數(shù)設(shè)置一塊內(nèi)存區(qū)域,作為信息FLASH ;
④根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為索引FLASH;2)在由步驟1)設(shè)置的標(biāo)定FLASH區(qū)域內(nèi)保存所有MAP的原始數(shù)據(jù);3)通過已有的工具軟件獲取每個MAP在標(biāo)定FLASH中存放的起始地址和占用空間大小,將其保存在由步驟1)設(shè)置的信息FLASH區(qū)域內(nèi);4)通過已有的工具軟件獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號,將其保存在由步驟1)設(shè)置的索引FLASH區(qū)域內(nèi);5)在系統(tǒng)初始化時,建立并初始化一個MAP指針數(shù)組,包括以下步驟①在MAP管理模塊中,設(shè)置一個指針數(shù)組,該數(shù)組元素的下標(biāo)為MAP的索引序號, 數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為指針,指向MAP在內(nèi)存中存放空間的起始地址;②在系統(tǒng)初始化時,根據(jù)MAP個數(shù),依次從信息FLASH中獲取每個MAP在標(biāo)定 FLASH中的起始地址,然后,將步驟①中的各個MAP指針,分別指向各個MAP在標(biāo)定FLASH中的起始地址;如果需要對MAP數(shù)據(jù)進(jìn)行修改,進(jìn)入步驟6);如果需要對MAP數(shù)據(jù)進(jìn)行查詢,進(jìn)入步驟7);6)在線標(biāo)定過程中,把正在標(biāo)定的MAP從單片機內(nèi)的FLASH拷貝到單片機內(nèi)的 RAM內(nèi),在RAM中對相應(yīng)的數(shù)據(jù)進(jìn)行修改,包括以下步驟①PC機上的標(biāo)定工具軟件與單片機系統(tǒng)建立連接后,在標(biāo)定工具軟件中對一個 MAP中的一個數(shù)據(jù)進(jìn)行修改,此時,標(biāo)定工具軟件計算該數(shù)據(jù)點相對于該MAP起始地址的地址偏移,然后根據(jù)該MAP在標(biāo)定FLASH中的起始地址,進(jìn)一步確定該數(shù)據(jù)點在標(biāo)定FLASH中存放的地址,標(biāo)定工具軟件把該地址和修改后的數(shù)據(jù)發(fā)送給單片機;②單片機根據(jù)由步驟①標(biāo)定工具軟件發(fā)送來的地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號,然后根據(jù)這個索引序號,訪問信息FLASH內(nèi)結(jié)構(gòu)體數(shù)組中下標(biāo)為此索引序號的元素,繼而得到該MAP在標(biāo)定FLASH內(nèi)的起始地址和占用空間大??;③單片機根據(jù)步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP指針當(dāng)前指向的地址如果該地址位于標(biāo)定FLASH內(nèi),進(jìn)入步驟④;如果該地址位于標(biāo)定RAM內(nèi),進(jìn)入步驟⑤;④根據(jù)步驟②獲得的起始地址和占用空間大小,單片機將位于標(biāo)定FLASH中以該起始地址開始的,相應(yīng)空間大小內(nèi)的數(shù)據(jù)全部拷貝到標(biāo)定RAM的空白區(qū)域中;記錄當(dāng)前標(biāo)定RAM區(qū)域中使用的空間大小;然后修改該MAP的指針,使其指向標(biāo)定RAM區(qū)域內(nèi)該MAP存放空間的起始地址,進(jìn)入步驟⑤;⑤已知需要修改的數(shù)據(jù)點在標(biāo)定FLASH中的存放地址,單片機根據(jù)該數(shù)據(jù)點所在 MAP在標(biāo)定FLASH內(nèi)的起始地址和在標(biāo)定RAM內(nèi)的起始地址,得到該數(shù)據(jù)點在標(biāo)定RAM中的存放地址,將該地址內(nèi)的數(shù)據(jù)修改為更新后的數(shù)據(jù);7)已知MAP在FLASH中的起始地址和占用空間大小,通過查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址,從而對以該起始地址開始的,相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,包括以下步驟①單片機把MAP在標(biāo)定FLASH中的起始地址作為參數(shù)傳遞給查表插值函數(shù);
5
②查表插值函數(shù)根據(jù)由步驟①獲得的起始地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號;③單片機根據(jù)由步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址;④基于由步驟③獲得的起始地址,對相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,結(jié)束。上述步驟幻中,通過已有的MAP存儲分析軟件獲取每個MAP在標(biāo)定FLASH中存放的起始地址和占用空間大小。上述步驟4)中,通過已有的MAP存儲分析軟件獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號。上述步驟4)中,在索引FLASH內(nèi),每個字節(jié)存放一個索引序號。上述步驟4)中,當(dāng)MAP個數(shù)大于255時,在索引FLASH內(nèi),每兩個字節(jié)存放一個索引序號。上述步驟3)中,采用結(jié)構(gòu)體數(shù)組保存每個MAP的起始地址和占用空間大小;該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為結(jié)構(gòu)體, 包括兩個成員MAP占用空間大小和MAP在標(biāo)定FLASH內(nèi)的起始地址。本發(fā)明由于采取以上技術(shù)方案,其具有以下優(yōu)點1、由于本發(fā)明只把需要標(biāo)定的 MAP數(shù)據(jù)在線實時地拷貝到RAM中,從而占用的RAM空間較小,解決了小容量RAM單片機系統(tǒng)標(biāo)定大量數(shù)據(jù)的問題。2、由于本發(fā)明能夠在線標(biāo)定所有需要標(biāo)定的MAP數(shù)據(jù),解決了現(xiàn)有的因分塊標(biāo)定或RAM空間不夠不能一次標(biāo)定所有MAP的問題。采用本發(fā)明可以降低單片機系統(tǒng)的復(fù)雜程度和制造成本。
圖1是本發(fā)明單片機內(nèi)存區(qū)域劃分示意圖;圖2為本發(fā)明初始化時的MAP指針示意圖;圖3為本發(fā)明在線標(biāo)定時的MAP指針示意圖。
具體實施例方式如圖1所示,本發(fā)明方法包括以下步驟1)在單片機內(nèi)存中設(shè)置若干個區(qū)域;2)在單片機內(nèi)存中保存所有MAP的原始數(shù)據(jù);3)在單片機內(nèi)存中保存每個MAP的起始地址和占用空間大?。?)在單片機內(nèi)存中保存每個MAP的索引序號;5)在系統(tǒng)初始化時,建立并初始化一個MAP指針數(shù)組;6)在線標(biāo)定過程中,把正在標(biāo)定的MAP從單片機內(nèi)的FLASH拷貝到單片機內(nèi)的 RAM內(nèi),在RAM中對相應(yīng)的數(shù)據(jù)進(jìn)行修改;7)已知MAP在FLASH中的起始地址和占用空間大小,通過查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址,從而對以該起始地址開始的,相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作。
下面結(jié)合附圖和實施例對本發(fā)明進(jìn)行詳細(xì)的描述。1)在單片機內(nèi)存中設(shè)置若干個區(qū)域,包括以下步驟①根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定FLASH,用于保存所有的MAP數(shù)據(jù)。在本發(fā)明實施例中,如圖1所示,將單片機內(nèi)存中地址0x140000開始的128K空間設(shè)置為標(biāo)定FLASH。②根據(jù)一次能夠標(biāo)定的MAP數(shù)據(jù)量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定RAM,用于保存在線標(biāo)定過程中更新過的MAP最新數(shù)據(jù)。在本發(fā)明實施例中,如圖1所示,將單片機內(nèi)存中地址0x400000開始的64K空間設(shè)置為標(biāo)定RAM。③根據(jù)MAP的個數(shù)設(shè)置一塊內(nèi)存區(qū)域,作為信息FLASH,用于保存每個MAP在標(biāo)定 FLASH中的起始地址和該MAP的占用空間大小。在本發(fā)明實施例中,如圖1所示,將單片機內(nèi)存地址0x100000開始的8K空間設(shè)置為信息FLASH。④根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為索引FLASH,用于保存標(biāo)定 FLASH對應(yīng)地址所存放的MAP的索引序號。在本發(fā)明實施例中,如圖1所示,將單片機內(nèi)存中地址0x160000開始的128K空間設(shè)置為索引FLASH。2)在單片機內(nèi)存中保存所有MAP的原始數(shù)據(jù),具體為在由步驟1)設(shè)置的標(biāo)定FLASH區(qū)域內(nèi)保存所有MAP的原始數(shù)據(jù)。3)在單片機內(nèi)存中保存每個MAP的起始地址和占用空間大小,包括以下步驟①通過已有的工具軟件,如MAP存儲分析軟件,獲取每個MAP在標(biāo)定FLASH中存放的起始地址和占用空間大??;②將每個MAP在標(biāo)定FLASH中的起始地址和占用空間大小保存在由步驟1)設(shè)置的信息FLASH區(qū)域內(nèi)。其中,可以采用結(jié)構(gòu)體數(shù)組記錄每個MAP的起始地址和占用空間大小;該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為結(jié)構(gòu)體,包括兩個成員MAP占用空間大小和MAP在標(biāo)定FLASH內(nèi)的起始地址。上述結(jié)構(gòu)體中,可以采用一個16位變量記錄MAP占用空間大小,采用一個32位變量記錄MAP在標(biāo)定FLASH內(nèi)的起始地址。假設(shè)在本發(fā)明實施例中,標(biāo)定FLASH內(nèi)有6張MAP,第一張MAP(MAPO)保存在 0x140000 0xl400FF 的范圍內(nèi),第二張 MAP (MAPI)保存在 0x140100 0xl401FF 的范圍內(nèi),第三張MAP(MAP2)保存在0x140200 0xl402FF的范圍內(nèi),第四張MAP(MAP3)保存在 0x140300 0xl403FF的范圍內(nèi),第五張MAP (MAP4)保存在0x140400 0xl404FF的范圍內(nèi), 第六張MAP (MAP5)保存在0x140500 0xl405FF的范圍內(nèi),這6張MAP對應(yīng)的MAP序號分別為0、1、2、3、4和5,于是信息FLASH中的結(jié)構(gòu)體數(shù)組相應(yīng)地包括六個數(shù)組元素,數(shù)組元素0為{0x100,0x140000}(表示MAPO的大小為0x100,起始地址為0x140000),數(shù)組元素1 為{0x100,0x140100},數(shù)組元素 2 為{0x100,0x140200},數(shù)組元素 3 為{0x100,0x140300}, 數(shù)組元素 4 為{0x100,0x140400},數(shù)組元素 5 為{0x100,0x140500}。
7
4)在單片機內(nèi)存中保存每個MAP的索引序號,包括以下步驟①通過已有的工具軟件,如MAP存儲分析軟件,獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號(從0開始);②在由步驟1)設(shè)置的索引FLASH區(qū)域內(nèi),以字節(jié)為單位存放標(biāo)定FLASH對應(yīng)地址所存放的MAP的索引序號。其中,如果MAP個數(shù)大于255,在索引FLASH內(nèi),可以每兩個字節(jié)存放一個索引序號。在本發(fā)明實施例中,0x160000 0xl600FF內(nèi)保存的都是0,0x1600100 0xl601FF 內(nèi)保存的都是 1,0x1600200 0xl602FF 內(nèi)保存的都是 2,0x1600300 0xl603FF 內(nèi)保存的都是3,0x1600400 0xl604FF內(nèi)保存的都是4,0x1600500 0xl605FF內(nèi)保存的都是5。5)在系統(tǒng)初始化時,建立并初始化一個MAP指針數(shù)組,包括以下步驟①在MAP管理模塊中,設(shè)置一個指針數(shù)組,該數(shù)組元素的下標(biāo)為MAP的索引序號, 數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為指針,指向MAP在內(nèi)存中存放空間的起始地址,用于表示MAP保存在以該起始地址開始的內(nèi)存區(qū)域內(nèi);②在系統(tǒng)初始化時,根據(jù)MAP個數(shù),依次從信息FLASH中獲取每個MAP在標(biāo)定 FLASH中的起始地址,然后,將步驟①中的各個MAP指針,分別指向各個MAP在標(biāo)定FLASH中的起始地址;如果需要對MAP數(shù)據(jù)進(jìn)行修改,進(jìn)入步驟6);如果需要對MAP數(shù)據(jù)進(jìn)行查詢,進(jìn)入步驟7)。在本發(fā)明實施例中,如圖2所示,系統(tǒng)初始化后,MAP指針指向的地址依次為ΜΑΡ0 指針指向0x140000,MAPI指針指向0x140100,MAP2指針指向0x140200,MAP3指針指向 0x140300, MAP4 指針指向 0x140400,MAP5 指針指向 0x140500。6)在線標(biāo)定過程中,把正在標(biāo)定的MAP從單片機內(nèi)的FLASH拷貝到單片機內(nèi)的 RAM內(nèi),在RAM中對相應(yīng)的數(shù)據(jù)進(jìn)行修改,包括以下步驟①PC機上的標(biāo)定工具軟件與單片機系統(tǒng)建立連接后,在標(biāo)定工具軟件中對一 MAP 中的一個數(shù)據(jù)進(jìn)行修改,此時,標(biāo)定工具軟件計算該數(shù)據(jù)點相對于所在MAP起始地址的地址偏移,然后根據(jù)該MAP在標(biāo)定FLASH中的起始地址,進(jìn)一步確定該數(shù)據(jù)點在標(biāo)定FLASH中的存放地址,標(biāo)定工具軟件把該地址和修改后的數(shù)據(jù)發(fā)送給單片機;在本發(fā)明實施例中,假設(shè)對MAP2中的一個數(shù)據(jù)點進(jìn)行修改,標(biāo)定工具軟件計算該點相對于MAP起始地址的地址偏移為0x10,因為MAP2保存在標(biāo)定FLASH中以地址0x140200 開始的內(nèi)存區(qū)域,且修改后的數(shù)據(jù)為0x66,那么標(biāo)定工具軟件把0x140210和0x66發(fā)送給單片機;②單片機根據(jù)由步驟①標(biāo)定工具軟件發(fā)送來的地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號,然后根據(jù)這個索引序號,訪問信息FLASH內(nèi)結(jié)構(gòu)體數(shù)組中下標(biāo)為此索引序號的元素,繼而得到該MAP在標(biāo)定FLASH內(nèi)的起始地址和占用空間大?。辉诒景l(fā)明實施例中,單片機根據(jù)接收到的地址0x140210,查詢索引FLASH地址 0x160210中所保存的MAP索引序號,該索引序號為2,根據(jù)該索引序號,訪問信息FLASH內(nèi)結(jié)構(gòu)體數(shù)組中下標(biāo)為2的元素,繼而得到MAP2在標(biāo)定FLASH內(nèi)的起始地址0x140200,占用空間大小0x100 ;③單片機根據(jù)步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP指針當(dāng)前指向的地址如果該地址位于標(biāo)定FLASH內(nèi),進(jìn)入步驟④;如果該地址位于標(biāo)定RAM內(nèi),進(jìn)入步驟⑤;④根據(jù)步驟②獲得的起始地址和占用空間大小,單片機將位于標(biāo)定FLASH中以該起始地址開始的,相應(yīng)空間大小內(nèi)的數(shù)據(jù)全部拷貝到標(biāo)定RAM的空白區(qū)域中;用一個整型 32位的變量,記錄當(dāng)前標(biāo)定RAM區(qū)域中使用的空間大??;然后修改該MAP的指針,使其指向標(biāo)定RAM區(qū)域內(nèi)該MAP存放空間的起始地址,進(jìn)入步驟⑤;⑤已知需要修改的數(shù)據(jù)點在標(biāo)定FLASH中的存放地址,單片機根據(jù)該數(shù)據(jù)點所在 MAP在標(biāo)定FLASH內(nèi)的起始地址和在標(biāo)定RAM內(nèi)的起始地址,得到該數(shù)據(jù)點在標(biāo)定RAM中的存放地址,將該地址內(nèi)的數(shù)據(jù)修改為更新后的數(shù)據(jù)。在本發(fā)明實施例中,當(dāng)前MAP2的指針指向地址0x140200,位于標(biāo)定FLASH內(nèi),單片機把標(biāo)定FLASH中地址0x140200 0xl402FF內(nèi)共0x100字節(jié)的數(shù)據(jù)全部拷貝到標(biāo)定RAM 中地址0x400000 0x4001FF的區(qū)域內(nèi);設(shè)置一個整型32位的變量,其值為0x100,表明標(biāo)定RAM區(qū)域中已經(jīng)使用了 0x100字節(jié)的空間;然后修改MAP2指針,使其指向0x400000 (如圖3所示);已知需要修改的數(shù)據(jù)點在標(biāo)定FLASH中的存放地址為0x140210,單片機根據(jù)該點所在MAP在標(biāo)定FLASH內(nèi)的起始地址0x140200和在標(biāo)定RAM內(nèi)的起始地址0x400000, 得到需要修改的數(shù)據(jù)點在標(biāo)定RAM中的存放地址0x400010,然后把地址0x400010內(nèi)儲存的數(shù)據(jù)修改為0x66。如果在完成上述標(biāo)定后,在標(biāo)定工具軟件中又修改了 MAP2中另一數(shù)據(jù)點,假設(shè)這次需要修改的數(shù)據(jù)點在標(biāo)定FLASH中的存放地址為0x140220,修改后的數(shù)據(jù)為0x55,那么標(biāo)定工具軟件把0x140220和0x55發(fā)送給單片機;單片機根據(jù)接收到的地址 0x140220,查詢索引FLASH中地址0x160220內(nèi)儲存的MAP索引序號,該索引序號為2,根據(jù)該索引序號,訪問信息FLASH內(nèi)結(jié)構(gòu)體數(shù)組中下標(biāo)為2的元素,繼而得到MAP2在標(biāo)定FLASH 內(nèi)的起始地址0x140200,占用空間大小0x100 ;查詢MAP2指針,由于該指針已經(jīng)指向了地址 0x400000,位于標(biāo)定RAM內(nèi),表明之前已經(jīng)把該MAP所有的數(shù)據(jù)從標(biāo)定FLASH中拷貝到了標(biāo)定RAM中,所以這次不再需要拷貝原始數(shù)據(jù);已知需要修改的數(shù)據(jù)點在標(biāo)定FLASH內(nèi)的存放地址為0x140220,單片機根據(jù)該點所在MAP在標(biāo)定FLASH內(nèi)的起始地址0x140200和在標(biāo)定 RAM內(nèi)的起始地址0x400000,得到需要修改的數(shù)據(jù)點在標(biāo)定RAM內(nèi)的存放地址0x400020,然后把地址0x400020內(nèi)儲存的數(shù)據(jù)修改為0x55。7)已知MAP在FLASH中的起始地址和占用空間大小,通過查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址,從而對以該起始地址開始的,相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,包括以下步驟①單片機把MAP在標(biāo)定FLASH中的起始地址作為參數(shù)傳遞給查表插值函數(shù);②查表插值函數(shù)根據(jù)由步驟①獲得的起始地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號;③單片機根據(jù)由步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址;④基于由步驟③獲得的起始地址,對相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,結(jié)束。在本發(fā)明實施例中,如果是對MAP2進(jìn)行查表插值操作,已知MAP2在FLASH中的起始地址0x140200和占用空間大小0x100,單片機把MAP2在標(biāo)定FLASH中的起始地址 0x140200作為參數(shù)傳遞給查表插值函數(shù),查表插值函數(shù)根據(jù)該起始地址,在索引FLASH中查詢地址0x160200中所保存的MAP索引序號,得到該序號為2,由此得知需要進(jìn)行操作的是MAP2,查詢MAP2指針,得到該MAP當(dāng)前位于以地址0x400000開始的內(nèi)存區(qū)域內(nèi),對以地址0x400000開始的,大小為0x100的內(nèi)存區(qū)域中的MAP數(shù)據(jù),進(jìn)行查表插值操作。如果是對MAPI進(jìn)行查表插值操作,則已知MAPI在FLASH中的起始地址0x140100和占用空間大小 0x100,單片機把MAPI在標(biāo)定FLASH中的起始地址0x140100作為參數(shù)傳遞給查表插值函數(shù),查表插值函數(shù)根據(jù)該起始地址,在索引FLASH中查詢0x140100中所保存的MAP索引序號,得到該索引序號為1,由此得知需要進(jìn)行操作的是MAPI,查詢MAPI指針,得到該MAP當(dāng)前位于以地址0x140100開始的內(nèi)存區(qū)域內(nèi),對以地址0x140100,大小為0x100的內(nèi)存區(qū)域中的MAP數(shù)據(jù),進(jìn)行查表插值操作。上述實施例僅用于說明本發(fā)明,其中各個步驟的具體實施方式
等都是可以有所變化的,凡是在本發(fā)明技術(shù)方案的基礎(chǔ)上進(jìn)行的等同變換和改進(jìn),均不應(yīng)排除在本發(fā)明的保護(hù)范圍之外。
權(quán)利要求
1. 一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于它包括以下步驟1)在單片機內(nèi)存中設(shè)置若干個區(qū)域,包括以下步驟①根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定FLASH;②根據(jù)一次能夠標(biāo)定的MAP數(shù)據(jù)量的大小設(shè)置一塊內(nèi)存區(qū)域,作為標(biāo)定RAM;③根據(jù)MAP的個數(shù)設(shè)置一塊內(nèi)存區(qū)域,作為信息FLASH;④根據(jù)MAP的數(shù)據(jù)總量的大小設(shè)置一塊內(nèi)存區(qū)域,作為索引FLASH;2)在由步驟1)設(shè)置的標(biāo)定FLASH區(qū)域內(nèi)保存所有MAP的原始數(shù)據(jù);3)通過已有的工具軟件獲取每個MAP在標(biāo)定FLASH中存放的起始地址和占用空間大小,將其保存在由步驟1)設(shè)置的信息FLASH區(qū)域內(nèi);4)通過已有的工具軟件獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號,將其保存在由步驟1)設(shè)置的索引FLASH區(qū)域內(nèi);5)在系統(tǒng)初始化時,建立并初始化一個MAP指針數(shù)組,包括以下步驟①在MAP管理模塊中,設(shè)置一個指針數(shù)組,該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為指針,指向MAP在內(nèi)存中存放空間的起始地址;②在系統(tǒng)初始化時,根據(jù)MAP個數(shù),依次從信息FLASH中獲取每個MAP在標(biāo)定FLASH中的起始地址,然后,將步驟①中的各個MAP指針,分別指向各個MAP在標(biāo)定FLASH中的起始地址;如果需要對MAP數(shù)據(jù)進(jìn)行修改,進(jìn)入步驟6);如果需要對MAP數(shù)據(jù)進(jìn)行查詢,進(jìn)入步驟7);6)在線標(biāo)定過程中,把正在標(biāo)定的MAP從單片機內(nèi)的FLASH拷貝到單片機內(nèi)的RAM內(nèi), 在RAM中對相應(yīng)的數(shù)據(jù)進(jìn)行修改,包括以下步驟①PC機上的標(biāo)定工具軟件與單片機系統(tǒng)建立連接后,在標(biāo)定工具軟件中對一個MAP中的一個數(shù)據(jù)進(jìn)行修改,此時,標(biāo)定工具軟件計算該數(shù)據(jù)點相對于該MAP起始地址的地址偏移,然后根據(jù)該MAP在標(biāo)定FLASH中的起始地址,進(jìn)一步確定該數(shù)據(jù)點在標(biāo)定FLASH中存放的地址,標(biāo)定工具軟件把該地址和修改后的數(shù)據(jù)發(fā)送給單片機;②單片機根據(jù)由步驟①標(biāo)定工具軟件發(fā)送來的地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號,然后根據(jù)這個索引序號,訪問信息FLASH內(nèi)結(jié)構(gòu)體數(shù)組中下標(biāo)為此索引序號的元素,繼而得到該MAP在標(biāo)定FLASH內(nèi)的起始地址和占用空間大?。虎蹎纹瑱C根據(jù)步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP指針當(dāng)前指向的地址如果該地址位于標(biāo)定FLASH內(nèi),進(jìn)入步驟④;如果該地址位于標(biāo)定RAM內(nèi),進(jìn)入步驟⑤;④根據(jù)步驟②獲得的起始地址和占用空間大小,單片機將位于標(biāo)定FLASH中以該起始地址開始的,相應(yīng)空間大小內(nèi)的數(shù)據(jù)全部拷貝到標(biāo)定RAM的空白區(qū)域中;記錄當(dāng)前標(biāo)定RAM 區(qū)域中使用的空間大??;然后修改該MAP的指針,使其指向標(biāo)定RAM區(qū)域內(nèi)該MAP存放空間的起始地址,進(jìn)入步驟⑤;⑤已知需要修改的數(shù)據(jù)點在標(biāo)定FLASH中的存放地址,單片機根據(jù)該數(shù)據(jù)點所在MAP 在標(biāo)定FLASH內(nèi)的起始地址和在標(biāo)定RAM內(nèi)的起始地址,得到該數(shù)據(jù)點在標(biāo)定RAM中的存放地址,將該地址內(nèi)的數(shù)據(jù)修改為更新后的數(shù)據(jù);7)已知MAP在FLASH中的起始地址和占用空間大小,通過查詢相應(yīng)的MAP指針,得到該 MAP當(dāng)前存放空間的起始地址,從而對以該起始地址開始的,相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,包括以下步驟①單片機把MAP在標(biāo)定FLASH中的起始地址作為參數(shù)傳遞給查表插值函數(shù);②查表插值函數(shù)根據(jù)由步驟①獲得的起始地址,查詢索引FLASH內(nèi)對應(yīng)地址中所保存的MAP索引序號;③單片機根據(jù)由步驟②獲得的MAP索引序號,查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址;④基于由步驟③獲得的起始地址,對相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作,結(jié)束。
2.如權(quán)利要求1所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟3) 中,通過已有的MAP存儲分析軟件獲取每個MAP在標(biāo)定FLASH中存放的起始地址和占用空間大小。
3.如權(quán)利要求1所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟4) 中,通過已有的MAP存儲分析軟件獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號。
4.如權(quán)利要求2所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟4) 中,通過已有的MAP存儲分析軟件獲取標(biāo)定FLASH區(qū)域內(nèi)每個字節(jié)所保存的MAP的索引序號。
5.如權(quán)利要求1或2或3或4任一項所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟4)中,在索引FLASH內(nèi),每個字節(jié)存放一個索引序號。
6.如權(quán)利要求1或2或3或4任一項所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟4)中,當(dāng)MAP個數(shù)大于255時,在索引FLASH內(nèi),每兩個字節(jié)存放一個索引序號。
7.如權(quán)利要求1或2或3或4任一項所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟3)中,采用結(jié)構(gòu)體數(shù)組保存每個MAP的起始地址和占用空間大小;該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為結(jié)構(gòu)體, 包括兩個成員MAP占用空間大小和MAP在標(biāo)定FLASH內(nèi)的起始地址。
8.如權(quán)利要求5所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟3) 中,采用結(jié)構(gòu)體數(shù)組保存每個MAP的起始地址和占用空間大??;該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為結(jié)構(gòu)體,包括兩個成員MAP占用空間大小和MAP在標(biāo)定FLASH內(nèi)的起始地址。
9.如權(quán)利要求6所述的一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于所述步驟3) 中,采用結(jié)構(gòu)體數(shù)組保存每個MAP的起始地址和占用空間大小;該數(shù)組元素的下標(biāo)為MAP的索引序號,數(shù)組元素的個數(shù)與MAP的個數(shù)相同,數(shù)組元素為結(jié)構(gòu)體,包括兩個成員MAP占用空間大小和MAP在標(biāo)定FLASH內(nèi)的起始地址。
全文摘要
本發(fā)明涉及一種單片機系統(tǒng)MAP數(shù)據(jù)標(biāo)定方法,其特征在于它包括步驟1)在單片機內(nèi)存中設(shè)置若干個區(qū)域;2)在單片機內(nèi)存中保存所有MAP的原始數(shù)據(jù);3)在單片機內(nèi)存中保存每個MAP的起始地址和占用空間大??;4)在單片機內(nèi)存中保存每個MAP的索引序號;5)在系統(tǒng)初始化時,建立并初始化一個MAP指針數(shù)組;6)在線標(biāo)定過程中,把正在標(biāo)定的MAP從單片機內(nèi)的FLASH拷貝到單片機內(nèi)的RAM內(nèi),在RAM中對相應(yīng)的數(shù)據(jù)進(jìn)行修改;7)通過查詢相應(yīng)的MAP指針,得到該MAP當(dāng)前存放空間的起始地址,從而對以該起始地址開始的,相應(yīng)空間大小的內(nèi)存區(qū)域中的數(shù)據(jù),進(jìn)行查表插值操作。采用本發(fā)明可以降低單片機系統(tǒng)的復(fù)雜程度和制造成本。
文檔編號G06F12/06GK102446138SQ20111027771
公開日2012年5月9日 申請日期2011年9月19日 優(yōu)先權(quán)日2011年9月19日
發(fā)明者方成, 李進(jìn), 楊福源, 歐陽明高 申請人:常州易控汽車電子有限公司, 清華大學(xué)