李現(xiàn)路:在DSP6000中怎樣編寫您的第一個程序(一) Post By:2009-11-23 23:44:02 李現(xiàn)路:在DSP6000中怎樣編寫您的第一個程序(1) 一、C語言編寫詳解 1.工程目錄最好放在: CCStudio_v3.3\MyProjects路徑下 2.CSS下和DSP6000編程緊密相關(guān)的目錄結(jié)構(gòu): a.CCStudio_v3.3\C6000\csl\include ---DSP6000常用頭文件 b.CCStudio_v3.3\C6000\csl\lib ---DSP6000常用庫文件 c.CCStudio_v3.3\C6000\cgtools\bin --各種編譯工具 3.我們要編寫的程序結(jié)構(gòu): a.含有main()函數(shù)的.c的源文件,而且這個文件的名字最好以main結(jié)尾 b.添加.cmd文件:內(nèi)存的分配 c.添加.asm文件:中斷向量表的文件 d.常用頭文件: e.常用庫文件: 4. 含有main()函數(shù)的.C的主文件的書寫規(guī)范: 完整版本請見http://www.51qianru.cn/bbs/ .c的源文件完整內(nèi)容如下: #include //#include #include #include #include #include #include #include "dm642.h" //dm642常用配置 #include "rtciic.h" //晶振總線配置,rtc即晶振,IIC即總線, #include "eeprom.h" //EEPROM的配置,EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲器--一種掉電后數(shù)據(jù)不丟失的存儲芯片。 #include "io&led.h" //輸入輸出及l(fā)ed配置 #include "dm642_ide.h" //IDE接口配置,IDE(Integrated Drive Electronics),即電子集成驅(qū)動器, #include "dm642_flash.h" //flash存儲器配置 #include "dm642_uart.h" //通用異步收發(fā)傳輸器的配置,UART通常用在與其他通訊協(xié)定(如RS-232)的連結(jié)上 extern far void vectors(); //調(diào)用中斷向量表 static GPIO_Handle hGpio; //GPIO句柄 void main() { /*-------------------------------------------------------*/ /* perform all initializations,開始初始化 */ /*-------------------------------------------------------*/ DM642_init(); /*----------------------------------------------------------*/ /*中斷向量表的初始化*/ IRQ_globalDisable(); //Point to the IRQ vector table,指向中斷向量表 IRQ_setVecs(vectors); /*----------------------------------------------------------*/ hGpio = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET); GPIO_reset(hGpio);////GPIO復(fù)位 //GPIO_config(hGpio,&MyGPIOCfg),GPIO的配置; GPIO_pinEnable(hGpio,GPIO_PIN15); //GPIO_PIN15管腳使能 GPIO_pinEnable(hGpio,GPIO_PIN4); GPIO_pinEnable(hGpio,GPIO_PIN5); GPIO_pinEnable(hGpio,GPIO_PIN6); GPIO_pinEnable(hGpio,GPIO_PIN7); GPIO_pinDirection(hGpio,GPIO_PIN15,GPIO_OUTPUT);//GPIO_PIN15管腳輸出信號 GPIO_pinDirection(hGpio,GPIO_PIN4,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN5,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN6,GPIO_OUTPUT); GPIO_pinDirection(hGpio,GPIO_PIN7,GPIO_OUTPUT); while(1) { GPIO_pinWrite(hGpio,GPIO_PIN15,0); //輸出0低電平,燈亮 DM642_waitusec(0x10000); //等待10000微妙,1秒=1000000微秒 GPIO_pinWrite(hGpio,GPIO_PIN15,1); //輸出1高電平,燈滅 DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN4,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN4,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN5,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN5,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN6,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN6,1); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN7,0); DM642_waitusec(0x10000); GPIO_pinWrite(hGpio,GPIO_PIN7,1); DM642_waitusec(0x10000); //這個程序是控制了GPIO15,GPIO4-7的高低電平 } } .c的源文件編寫規(guī)范如下: a.首先引用頭文件:頭文件含有初始化設(shè)備的必要的接口函數(shù),宏定義等 b.調(diào)用中斷向量表: c.static:不被編譯器優(yōu)化,常用于句柄的修飾 d.自定義的函數(shù)可放在main()的前面或后面。 外部函數(shù):自己定義的函數(shù),引用外部的文件定義的函數(shù) 內(nèi)部函數(shù):DSP6000內(nèi)部定義了的函數(shù)就是內(nèi)部函數(shù) e.DSP6000中的數(shù)據(jù)格式一般為十六進(jìn)制。 f.主要while循環(huán)---while(1),while(0)的區(qū)別 二、.cmd文件要點(diǎn)講解: 內(nèi)存分配文件的源代碼如下: MEMORY { boot: o = 00000000h l = 000400h /* all SRAM,在片內(nèi)SRAM中保留一塊Boot空間*/ L2 : o = 00000400h l = 0003fb00h /* all SRAM ,L2,為DSP片內(nèi)存儲器,是第2級存儲器[第一級存儲器包括獨(dú)立的程序Cach(L1P)和數(shù)據(jù)Cach(L1D) ],它是一個統(tǒng)一的空間,部分程序和數(shù)據(jù),統(tǒng)稱為L2,可以作為普通的SRAM映射到存儲空間 */ CE01: o = 80000000h l = 00100000h /* external memory */ CE02: o = 80100000h l = 00f000000h /* external memory */ } SECTIONS { .boot_load > boot /*引導(dǎo)程序入口映射到該boot空間*/ .vecs > L2 /*映射ves_dm642.asp中定義的.vecs到L2空間*/ .cinit > L2 /*初始化變量和常數(shù)表*/ .text > L2 /*可執(zhí)行代碼段的映射*/ .stack > L2 /*為系統(tǒng)堆棧分配存儲器。該段用于將變量傳遞至函數(shù)或者用來分配局部變量。*/ .bss > L2 /*保留全局和靜態(tài)變量空間。在啟動和導(dǎo)入的時候,C/C++編譯器會啟動程序?qū)?cint段中的數(shù)據(jù)復(fù)制出來,以初始化.bss段中的變量。*/ .const > L2 /*包含由C/C++限定詞const定義的字符串常量和數(shù)據(jù)*/ .data > L2 /* 初始化數(shù)據(jù)段*/ .far > L2 /*供外部文件調(diào)用的變量*/ .switch > L2 /*控制語句段映射*/ .sysmem > L2 /*初始化系統(tǒng)空間*/ .tables > L2 /*初始化數(shù)據(jù)表*/ .cio > L2 /*io口*/ .external > CE02 /*外部變量的初始化*/ } 1、 cmd文件要點(diǎn) a.boot:仿真的時候boot可以不配置,在把程序燒寫到flash中時要配置,他的作用是 放bootload引導(dǎo)程序 b.怎樣劃分空間:o-origin 起始地址;l-length;區(qū)塊的標(biāo)記可以任意改,長度不可以 超越最終的空間地址 c.劃分內(nèi)存,不一定全部劃分 2、.cmd文件之Section分析 C/C++的編譯環(huán)境包含以下段 已初始化段: (1).cinit段:包含初始化變量和常量表 (2).const段:const定義的字符串常量和數(shù)據(jù)(他們不能同時被volatile定義) volatile--不能被編譯器優(yōu)化 (3).switch段:包含跳轉(zhuǎn)表和大的switch聲明 (4).text段:可執(zhí)行代碼段 未初始化段: (1).bss段:保留全局和靜態(tài)變量空間 (2).far段:保留遠(yuǎn)程的全局和靜態(tài)變量空間 (3).stack段:為系統(tǒng)堆棧分配存儲器。用于將變量傳遞至函數(shù)或用來分配 局部變量 (4).system段:為動態(tài)存儲器函數(shù)malloc,calloc,realloc分分配存儲器空間。 如果程序沒有用到上面的函數(shù),就不會創(chuàng)建.system段 所有我們的內(nèi)存分配,應(yīng)該盡量包含上面的初始化段和未初始化段中所定義的段。 完整版本請見http://www.51qianru.cn/bbs/ 曙海教育 曙海嵌入式學(xué)院3G通信培訓(xùn)中心 (MTK培訓(xùn),Android培訓(xùn),iPhone培訓(xùn)) 電話:021-51875830 網(wǎng)址:http://www.51qianru.cn 講師:李現(xiàn)路 版權(quán)所有-曙海教育 轉(zhuǎn)摘請注明作者和出處 課程有: symbian培訓(xùn)班 dsp6000培訓(xùn)班 cadence pcb培訓(xùn)班 單片機(jī)培訓(xùn)班 android培訓(xùn)班 brew手機(jī)培訓(xùn) 嵌入式培訓(xùn) dsp培訓(xùn) 嵌入式培訓(xùn) |