《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于C語言和GEL語言的Flash編程新方法
基于C語言和GEL語言的Flash編程新方法
摘要: 以TMS320VC5402為例,探討一種綜合運用C語言、數據文件及GEL語言的Flash編程新方法。該方法完全采用C語言編寫燒寫程序,解決了指針不能訪問高端Flash的問題;把引導表作成數據文件,可實現大引導表的分批次加載;通過GEL程序控制C程序執行,較好地體現了Flash編程的流程。
Abstract:
Key words :

摘要 以TMS320VC5402為例,探討一種綜合運用C語言、數據文件及GEL語言的Flash編程新方法。該方法完全采用C語言編寫燒寫程序,解決了指針不能訪問高端Flash的問題;把引導表作成數據文件,可實現大引導表的分批次加載;通過GEL程序控制C程序執行,較好地體現了Flash編程的流程。
關鍵詞 TMS320VC5402 Flash 引導表 通用擴展語言 GEL
引言
  在DSP應用系統開發的后期,一般需要將用戶程序寫進Flash等非易失性存儲器,以便采用并行引導的方法實現用戶程序的自舉加載。這一步驟稱為“燒寫”;針對Flash的燒寫又稱為Flash編程。以往的編程方法大多采用匯編語言編寫程序,可讀性較差,并將引導表的制作也放在程序中實現;用戶程序一變,燒寫程序就得重新編寫,不具有通用性。參考文獻[1]采用C語言完成Flash讀寫,較清晰地體現了Flash編程的思想,但是它采用指針訪問Flash空間,不能對高端Flash(64 K字存儲空間以外)進行訪問,且將引導表作成數組的方法仍顯機械。
  這里提出的Flash編程方法完全采用C語言編寫燒寫程序,運用函數地址訪問高端Flash,借助數據文件將引導表加載到數據空間。GEL(General Extension Language,通用擴展語言)作為一種程序擴展語言,被廣泛用于調試及程序運行環境的定制。這里將GEL語言運用于Flash編程,可以控制C程序在數據加載完成后執行燒寫過程,從而實現大引導表的燒寫。
1 DSP開發板及Flash存儲器
  筆者使用的DSP開發板上有1片TMS320VC5402通用DSP芯片、1片SST39VF400A存儲芯片(Flash)、鍵盤和液晶顯示器等。其中Flash容量為256 K字(1字=16位),組織為128個扇區或8個塊。為充分發揮Flash容量大的特點,本系統在硬件上將Flash空間的映射設計為:在上電自舉過程中,Flash空間的0x04000~0x0FFFF映射到數據空間的0x4000~0xFFFF;上電自舉完成后,整個Flash空間0x00000~0x3FFFF映射到程序空間的0x80000~0xBFFFF,即映射到了TMS320VC5402的擴展程序空間,處于高地址,因此稱為“高端Flash”。由此可知,對系統進行應用開發時,Flash總是表現為高端Flash。

圖1 Flash編程流程
2 Flash編程流程
  用戶程序一般以可執行COFF(公共目標文件格式)文件格式存在(后綴名為.out),Flash編程所要完成的就是將此可執行文件轉換成特定的ASCII碼引導表的格式,并按此格式順序寫進Flash。Flash編程流程如圖1所示。下面僅以一個動畫顯示程序qq.out為例,介紹如何將其燒寫進Flash。
2.1 生成引導表
  通過Hex轉換工具,將用戶程序qq.out文件轉換成十六進制形式的ASCII碼流文件(ASCIIHex格式文件[2])qq.asc。首先編寫一個convert.cmd命令文件。部分內容如下:
  qq.out/*用戶程序*/
  -a/*轉換成ASCIIHex格式文件*/
  -map qq.mxp/*包含引導表的長度等信息*/
  -o qq.asc/*轉換成qq.asc*/
  執行命令行“hex500 convert.cmd”將產生qq.mxp和qq.asc文件。其中qq.mxp文件有這樣的信息:“CONTENTS: 00000000…0000433b”。表示qq.asc中的引導表長度為0x433C字,內容大致為:“10 AA 7F FF 00 02 00 00…”。
2.2 轉換成數據文件
  編程將ASCIIHex格式文件qq.asc轉換成CCS(Code Composer Studio,代碼集成開發環境)支持的數據文件(后綴名為.dat)。例中的引導表已屬較大的表,這里將其轉換為兩個數據文件qq_dat1.dat和qq_dat2.dat,以在同一緩沖區分兩次裝載,避免因緩沖區太小而容納不了引導表的情況發生。
  CCS支持的數據文件的第一行為文件頭信息,格式為:
  幻數  數據格式  起始地址  頁類型  數據塊大小
其后是文件內容,每行表示一個數據。其中幻數固定為“1651”,數據格式可以選擇“1”(十六進制整型)、“2”(十進制整型)、“3”(十進制長整型)、“4”(十進制浮點型)。
  利用VC6.0編寫該轉換程序是簡單的,程序運行后產生的qq_dat1.dat文件將是:“1651 1 4000 1 2000 0x10AA…”。從文件頭信息可知,加載該文件可將引導表裝載到數據空間0x4000起始的長度為0x2000的緩沖區中。
2.3 Flash燒寫
  利用GEL程序將引導表形成的數據文件qq_dat1.dat和qq_dat2.dat逐次裝載到數據空間,調用C程序執行燒寫過程。
  由于Flash空間映射到TMS320VC5402程序空間的0x80000~0xBFFFF,故實際編寫程序時使用的Flash空間的地址均需偏移0x80000。例如,Flash空間的0x5555地址單元實際上為0x85555。
  正如前面所介紹的,雖然高端Flash囊括了整個Flash空間,但是對于C54x系列芯片,其C語言指針的寬度為16位,只能訪問64 K字范圍(0x0000~0xFFFF)之內的存儲空間,而不能訪問高端Flash(0x80000~0xBFFFF)。
  參考文獻[3]討論了用C語言指針不能訪問C54x系列DSP擴展程序空間的問題,提出了用函數名代替指針來訪問擴展程序空間的方法,并給出了可供C程序調用的pfunc_ext.lib庫。這一方法本質上是將函數名代表的程序空間地址(20位)傳送到40位的累加器,進行累加器尋址,因此使用該庫恰好可以解決指針不能訪問高端Flash的問題。庫中以下兩個函數是有用的:
int PFUNC_wordRead(PFUNC addrProg);
//讀取(擴展)程序空間地址addrProg處的一個字
void PFUNC_wordWrite(PFUNC addrProg,int wData);
//將字wData寫到(擴展)程序空間地址addrProg處
  為應用pfunc_ext.lib庫,需定義一些函數,并在命令文件中為這些函數所在的自定義代碼段分配段地址,以使這些函數的函數名指向Flash特定的地址單元。例如,可以編寫一個C程序源文件,定義一個空函數FLASH_5555以指向0x85555:
#pragma CODE_SECTION(FLASH_5555,"bigpointer")
void FLASH_5555(void){}
  Flash的其他地址可依此方法得到, pfunc_ext.lib庫的具體說明見參考文獻[3]。
  下面應用pfunc_ext.lib庫編寫了Flash擦除和編程的3個基本函數flash_erase()、flash_word_write()、flash_serial_write(),分別完成Flash擦除、字編程和連續編程。其中連續編程只是循環調用了字編程函數。擦除和字編程的流程分別如圖2和圖3所示。擦除函數的代碼如下:
//實現片擦除、塊擦除或扇區擦除,type定義擦除方式,addr給出扇區起始地址或塊起始地址
unsigned int flash_erase(PFUNC addr,unsigned type){
  //執行SST39VF400A的擦除命令序列
  PFUNC_wordWrite(FLASH_5555,FLASH_CMD1);
  //0xAA﹥*(0x85555)
  …
  PFUNC_wordWrite(addr,type);//擦除類型命令
  …
  }

圖2 擦除流程

圖3 字編程流程
  有了這些基本函數,就可以在主函數中完成Flash的燒寫。下面的主函數實現將引導表燒寫進Flash。
void main(){
  …
  asm("erase:");//擦除0x80000~0x97FFF,塊擦除
  for(i=0;i<3;i++)
  flag=flash_erase((PFUNC)i,FLASH_BLOCK_ERASE);
  asm("program1:");//連續編程
  flag=flash_serial_write(FLASH_BASE,MEM_BASE,usercode_length1);//FLASH_BASE指向0x84000
  asm("program2:");//連續編程
  …
  asm("program_bootaddr:");//字編程
  flag=flash_write_word(FLASH_FFFF,0x4000);
}
  例中采用了塊擦除的方式。MEM_BASE是多次加載引導表的緩沖區起始地址,為與數據文件qq_dat1.dat中文件頭對應,應保證MEM_BASE指向0x4000。其方法類似于上述函數名的地址分配(使用#pragma DATA_SECTION偽指令)。最后完成字編程,使Bootloader上電時得以在數據空間的0xFFFF處讀取引導表在數據空間的起始地址,例中為0x4000。
  為使主函數正確執行,需借GEL語言的運行調試功能,由此設計的GEL程序真正體現了Flash燒寫的流程。GEL程序流程如圖4所示,部分代碼如下:
menuitem "PROGRAMMING";
hotmenu FlashFiring(){…
  GEL_Load("ProgramFlash.out");//加載C燒寫程序
  …
  if(flag){
  GEL_Load("qq_dat1.dat");//加載數據文件
  GEL_Go(program1); //執行連續編程
  …
  GEL_Load("qq_dat2.dat");//加載數據文件
  GEL_Go(program2); //執行連續編程…
}
  }

圖4 GEL程序流程
  GEL程序在C程序每次執行前設定正確的環境變量并初始化緩沖區。例如,數據文件的長度usercode_length1就是需要根據實際的數據文件長度進行設定的環境變量;而在進行連續編程之前,需要GEL程序重新加載MEM_BASE緩沖區。
3 運行結果
  在CCS環境下選擇File/Load GEL,裝載以上GEL程序,選擇GEL/ PROGRAMMING/FlashFiring,即可實現Flash燒寫。拔掉仿真器,給系統重新上電,可以看到液晶顯示器上QQ企鵝的動畫。
4 結論
  通過函數地址可以進行Flash的全空間訪問;采用C語言編寫Flash擦除和編程函數,增強了程序的可讀性;將引導表作成多個數據文件,一方面適于大引導表的加載,另一方面使Flash編程算法與編程數據完全分離,提高了算法的通用性;僅在GEL程序中修改參數即可實現另一用戶程序的燒寫,體現了方法的靈活性。
參考文獻
[1] 張勇.C/C++語言硬件程序設計——基于TMS320C5000系列DSP[M].西安:西安電子科技大學出版社,2003(5):206-230.
[2] Texas Instruments. TMS320C54x Assembly Language Tools User's Guide. SPRUF102,200-210.
[3] David M Alter. Using C to Access Data Stored in Program Memory on the TMS320C54x DSP[R]. SPRA177A, Texas Instruments Application Report,2005-08.
[4] 北京合眾達電子技術有限公司. SEED——MMI5402用戶指南. 2004-06.
王海濤(碩士),主要研究方向為機器視覺、焊接自動控制;
張文明(教授),主要研究方向為焊接自動控制;
王濱(教授),主要研究方向為機器視覺。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美大成色www永久网站婷| 农村妇女精品| 激情小说另类小说亚洲欧美| 久久成人一区| 欧美日韩综合在线免费观看| 久久香蕉国产线看观看网| 午夜精品久久| aa亚洲婷婷| 免费在线观看成人av| 欧美日韩妖精视频| 亚洲理论在线观看| 欧美午夜久久| 国产精品视频yy9099| 在线观看视频一区二区欧美日韩| 免费成人你懂的| 国产精品一页| 亚洲国产成人一区| 欧美精品日韩www.p站| 亚洲一区影院| 亚洲激情精品| 性色av一区二区三区红粉影视| 久久视频在线视频| 欧美日韩国产欧美日美国产精品| 在线电影欧美日韩一区二区私密| 99香蕉国产精品偷在线观看| 欧美一级在线视频| 国产精品伦子伦免费视频| 狠狠色丁香婷婷综合| 久久人人97超碰精品888| 亚洲欧美日韩电影| 激情国产一区二区| 国产一区二区三区免费不卡| 国产真实久久| 亚洲精品免费在线观看| 久久色在线播放| 欧美日本一区二区视频在线观看| 国产精品国码视频| 亚洲福利小视频| 亚洲日本精品国产第一区| 欧美日韩亚洲一区二区三区四区| 99国产精品99久久久久久| 久久综合伊人77777蜜臀| 国产精品久久久久久久久久直播| 激情视频亚洲| 99riav1国产精品视频| 在线观看日韩欧美| 韩国av一区二区三区四区| 国产日韩欧美一区二区三区在线观看| 亚洲视频免费观看| 午夜久久久久久| 久久免费的精品国产v∧| 国产精品女人网站| 男女激情视频一区| 亚洲小说区图片区| 国产精品欧美日韩一区二区| 国产精品亚洲片夜色在线| 亚洲激情在线播放| 亚洲一区欧美一区| 亚洲欧美日韩视频一区| 免费亚洲电影| 老司机67194精品线观看| 欧美日韩亚洲综合一区| 亚洲欧美日韩在线一区| 欧美sm重口味系列视频在线观看| 免费观看日韩| 欧美精品一区三区在线观看| 亚洲天天影视| 午夜在线a亚洲v天堂网2018| 国产一区91| 国产精品久久久久久久浪潮网站| 欧美乱在线观看| 亚洲女人av| 亚洲已满18点击进入久久| 最近中文字幕mv在线一区二区三区四区| 午夜在线播放视频欧美| 久久久久一区二区| 亚洲视频axxx| 快射av在线播放一区| 欧美一区高清| 亚洲看片网站| 亚洲人成在线免费观看| 国产精品久久久久久久久免费| 美女视频黄a大片欧美| 欧美久久久久久蜜桃| 亚洲女性裸体视频| 激情综合中文娱乐网| 在线亚洲免费视频| 国产精品久久久久久久第一福利| 午夜精品美女久久久久av福利| 国产精品www网站| 欧美精品一区二区三区蜜臀| 国产欧美一区二区三区久久人妖| 亚洲在线观看免费| 欧美日韩不卡一区| 国产性做久久久久久| 老色鬼久久亚洲一区二区| 欧美日韩在线综合| 国产自产精品| 久久视频一区二区| 久久综合综合久久综合| 免费视频一区二区三区在线观看| 欧美一区永久视频免费观看| 美女亚洲精品| 免费在线看成人av| 国产亚洲成av人片在线观看桃| 欧美女激情福利| 国产精品男gay被猛男狂揉视频| 国产欧美一区二区三区在线老狼| 亚洲小视频在线观看| 国产视频精品xxxx| 久久国产日本精品| 在线观看欧美日本| 欧美一区久久| 欧美理论电影网| 欧美jizz19hd性欧美| 亚洲一区二区免费| 国产精品美女在线| 中文日韩欧美| 国产日韩精品在线| 欧美一区二区大片| 午夜精品久久99蜜桃的功能介绍| 夜夜嗨av一区二区三区免费区| 亚洲欧美日韩精品久久亚洲区| 欧美日韩一区二区视频在线观看| 国产精品外国| 久久精品在线免费观看| 欧美国产极速在线| 亚洲第一主播视频| 亚洲精品乱码久久久久久蜜桃91| 亚洲成人在线网站| 一区二区三区精品在线| 欧美一区亚洲| 亚洲欧洲一区二区三区| 欧美一区二粉嫩精品国产一线天| 亚洲网站在线| 一本色道久久88综合亚洲精品ⅰ| 欧美韩国日本综合| 亚洲精品一线二线三线无人区| 午夜一级在线看亚洲| 一区二区三区日韩精品视频| 牛牛精品成人免费视频| 国产精品久久久久久久久久ktv| 久久精品国产69国产精品亚洲| 理论片一区二区在线| 韩国一区电影| 国产精品久久网站| 亚洲人成小说网站色在线| 亚洲天堂视频在线观看| 美女日韩在线中文字幕| 午夜精品影院在线观看| 精品88久久久久88久久久| 欧美精品一区二区三区久久久竹菊| 国产午夜精品视频免费不卡69堂| 亚洲丝袜av一区| 亚洲精品小视频| 欧美精品在线视频观看| 亚洲福利视频专区| 欧美性视频网站| 黄色成人av| 美女亚洲精品| 欧美视频一区二区三区在线观看| 欧美在线播放高清精品| 在线欧美小视频| 国产亚洲精久久久久久| 国产精品久久久久久久久久久久久久| 欧美亚洲成人精品| 欧美系列精品| 亚洲深夜福利在线| 欧美二区在线看| 欧美一级专区免费大片| 欧美久久久久| 亚洲一二三区精品| 亚洲精品美女在线观看播放| 欧美日韩国产综合在线| 国产日产高清欧美一区二区三区| 亚洲午夜羞羞片| 欧美激情国产高清| 久久久在线视频| 亚洲狠狠丁香婷婷综合久久久| 美女任你摸久久| 国产日韩精品入口| 国产精品自拍三区| 午夜在线a亚洲v天堂网2018| 正在播放欧美一区| 欧美激情精品久久久久| 永久555www成人免费| 国产午夜精品美女视频明星a级| 亚洲精品国产精品久久清纯直播| 亚洲毛片在线免费观看| 国产欧美日韩不卡| 国产精品99久久久久久久久久久久| 一本色道久久| 久久久美女艺术照精彩视频福利播放| 有坂深雪在线一区| 欧美另类99xxxxx| 国产资源精品在线观看| 香蕉久久一区二区不卡无毒影院| 美女性感视频久久久| 黄色成人小视频| 亚洲影院在线观看| 国产精品成人一区二区三区吃奶| 国产精品v一区二区三区| 亚洲国产精品毛片| 久久久久久午夜| 亚洲国产精品久久久久婷婷884| 国产精品日韩精品欧美在线| 欧美日韩美女一区二区| 一区二区毛片| 国产欧美高清| 国产一在线精品一区在线观看| 国内精品久久久久影院 日本资源| 欧美日韩高清免费| 在线播放日韩| 欧美另类女人| 久久九九精品| 国产精品久久久久一区二区三区| 一区二区三区免费网站| 一区二区激情小说| 欧美了一区在线观看| 欧美丝袜一区二区| 久久国产一区二区三区| 久久综合综合久久综合| 欧美有码在线观看视频| 午夜欧美大尺度福利影院在线看| 国产精品一区二区在线| 欧美成人中文字幕| 久久久久久黄| 国产日韩欧美精品一区| 亚洲欧洲精品一区二区精品久久久| 亚洲美女免费精品视频在线观看| 亚洲自拍另类| 一本色道久久综合亚洲精品高清| 久久久久久久一区二区三区| 国产欧美日本一区视频| 亚洲剧情一区二区| 国产网站欧美日韩免费精品在线观看| 欧美精品七区| 欧美国产亚洲精品久久久8v| 亚洲激精日韩激精欧美精品| 国产性做久久久久久| 在线精品在线| 国产日韩欧美| 亚洲图片在线观看| 欧美日产一区二区三区在线观看| 欧美日韩一区二区三区四区五区| 免费视频最近日韩| 在线日本欧美| 国产精品视频一区二区高潮| 欧美激情综合色| 最新成人av在线| 国产午夜精品久久久| 狠狠入ady亚洲精品| 国产一区二区成人久久免费影院| 欧美激情乱人伦| 国产精品久久久久久久免费软件| 影音先锋亚洲一区| 亚洲国产精品久久久久| 亚洲国产精品电影在线观看| 亚洲一区二区成人| 国产精品高潮呻吟| 激情av一区二区| 欧美成人午夜激情视频| 久久婷婷久久一区二区三区| 狠狠久久亚洲欧美| 久久只有精品| 一区二区三区精品| 欧美日韩精品一本二本三本| 亚洲韩国精品一区| 久久天堂国产精品| 欧美视频中文在线看| 亚洲免费在线| 国产毛片久久| 欧美少妇一区二区| 欧美日韩国产成人在线免费| 欧美性大战久久久久久久蜜臀| 欧美成人一二三| 最新精品在线| 国产午夜精品福利| 欧美影院精品一区| 久久香蕉国产线看观看网| 欧美激情亚洲视频| 久久久久国产一区二区三区| 欧美日韩国产黄| 亚洲视频在线播放| 国外成人性视频| 欧美成人伊人久久综合网| 欧美另类人妖| 欧美一区二区三区免费在线看| 欧美精品一区二区三区在线播放| 亚洲精品一区二区三区蜜桃久| 欧美成人国产一区二区| 亚洲女爱视频在线| 欧美怡红院视频一区二区三区| 黄色亚洲网站| 亚洲经典视频在线观看| 欧美精品电影在线| 午夜精品久久久久久99热| 亚洲一区二区在线观看视频| 午夜精品一区二区三区在线| 亚洲欧美日韩综合aⅴ视频| 久久激情视频| 亚洲精品一区中文| 欧美三级精品| 在线视频精品| 在线观看国产成人av片| 亚洲美女精品成人在线视频| 黄色成人在线| 欧美精品一区二区在线播放| 久久精品视频在线免费观看| 国产精品日韩一区二区| 欧美乱大交xxxxx| 香蕉久久久久久久av网站| 亚洲欧美日韩国产一区二区三区| 国产精品theporn88| 老司机免费视频一区二区三区| 欧美成人免费播放| 国产精品影院在线观看| 亚洲欧美综合| 亚洲欧洲日本mm| 麻豆视频一区二区| 老鸭窝91久久精品色噜噜导演| 午夜视频在线观看一区| 永久91嫩草亚洲精品人人| 麻豆九一精品爱看视频在线观看免费| 欧美激情精品久久久久久久变态| 亚洲精品视频在线观看免费| 欧美久久久久中文字幕| 国产精品成人午夜|