<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>
    以文本方式查看主題

    -  曙海教育集團(tuán)論壇  (http://m.hufushizhe.com/bbs/index.asp)
    --  WinCE應(yīng)用開(kāi)發(fā)  (http://m.hufushizhe.com/bbs/list.asp?boardid=35)
    ----  在Bootloader, WinCE,應(yīng)用程序間傳遞參數(shù)的方法  (http://m.hufushizhe.com/bbs/dispbbs.asp?boardid=35&id=1791)

    --  作者:wangxinxin
    --  發(fā)布時(shí)間:2010-11-26 9:03:36
    --  在Bootloader, WinCE,應(yīng)用程序間傳遞參數(shù)的方法

    基本思想就是在Nand Flash等固態(tài)存儲(chǔ)器中保存這個(gè)變量
    實(shí)現(xiàn)方法有很多種,如果你使用的是EBoot,EBoot的例子中會(huì)有一個(gè)BOOT_CFG的結(jié)構(gòu)體,默認(rèn)保存EBoot參數(shù)的,這個(gè)參數(shù)保存在固態(tài)存儲(chǔ)器上,可以參考WINCE500\\PLATFORM\\SMDK2410\\SRC\\BOOTLOADER\\EBOOT\\main.c
    這樣解決了保存變量的問(wèn)題,但是如何在Bootloader與操作系統(tǒng)間傳遞參數(shù)呢,
    同樣對(duì)于2410的例子,OEMPlatformInit里面會(huì)有一個(gè)BSP_ARGS的結(jié)構(gòu)體,用來(lái)在EBoot與WinCE之間傳遞參數(shù),這塊區(qū)域是SDRAM的區(qū)域,一般是保留出來(lái)作為參數(shù)傳遞的,WinCE不會(huì)覆蓋這塊區(qū)域,這個(gè)結(jié)構(gòu)體在EBoot中被填充,所以,可以將參數(shù)放在BOOT_CFG中,然后EBoot初始化時(shí)從Nand中讀出來(lái),放到BSP_ARGS,以達(dá)到傳遞給WinCE的目的。
    但是這樣只是解決了讀取的問(wèn)題,這個(gè)參數(shù)在CE中的修改還是不會(huì)被保存。
    這種默認(rèn)的方法最一般的用途就是來(lái)控制KITL,這種單向參數(shù)傳遞的
    如果需要雙向傳遞或保存,最簡(jiǎn)單的方法就是在WinCE驅(qū)動(dòng)中添加一個(gè)IOCTL,比如FMD的IOCTL,用來(lái)讀寫(xiě)這塊參數(shù)區(qū)域
    這樣子,應(yīng)用程序也就可以訪問(wèn)這塊參數(shù)了。

    如果不使用EBoot的默認(rèn)方式,就直接規(guī)定一個(gè)或幾個(gè)Nand區(qū)域,讀寫(xiě)方案同上,以達(dá)到多個(gè)應(yīng)用的參數(shù)分開(kāi)保存的目的,比如BT MAC在Block2, WIFI MAC在Block3, 其他參數(shù)在Block4。這樣做可以將經(jīng)常讀寫(xiě)的參數(shù)和不經(jīng)常讀寫(xiě)的參數(shù)分開(kāi),以免經(jīng)常讀寫(xiě)的塊損壞,而破壞其他的功能