PIC微控制器之注意事項
MPLAB IDE v8.92 只能支援英文目錄,所以一般而言是把相應的工程拷到D盤中,然後開啟編譯,最後如果想要儲存工程,應該拷回想要儲存的位置
當在中文目錄中會出現“找不到指定路徑”的錯誤,如下:
關於超大陣列問題:
本實驗用的編譯器是xc16-gcc.exe,整合開發環境是MPLAB IDE v8.92,當前的編譯器配置如下:
-g -Wall -mlarge-code -mlarge-data -Os -fno-ivopts
如下圖:
其中這裡有一個超大的陣列:
這時候編譯會有這樣的一個錯誤:
從提示可以知道,這是一個數據超出的錯誤,但是這裡是超出了資料段,而不是說超出了晶片的flash,我們可以這樣檢視是否超過了flash,去掉這個陣列編譯看看佔用了多少flash,如下:
也就是說佔用的flash空間是:81459+7674=89133,但是微控制器的flash卻是這樣的:
所以即是加上陣列的35408也是124541並沒有超出flash,所以這個錯誤完全是編譯器的問題,從網上收到這個文章:
http://electronics.stackexchange.com/questions/25878/epmp-on-pic24fj128da210
其中有關鍵的提示:
所以這裡增加-mlarge-arrays這個編譯命令,如下:
這時候的編譯結果如下所示:
從網上找到這個辦法:
http://www.microchip.com/forums/m621857.aspx
其中的關鍵的地方是這樣的:
在檔案中修改如下:
這時候編譯結果如下:
編譯成功了,要說明的是,如果陣列再增大到一定的程度,如下
這時候又會出現新的錯誤,本人決定去弄一張更小的圖片吧,不要那麼大的圖片了,所以這個錯誤將不再深究,錯誤如下:
從這裡看,或許真的是因為溢位flash了
注意:上面只是說明了怎麼裝資料,並沒有說明怎麼使用資料,下面的函式給出了一個怎麼使用這個陣列資料的說明:
void show_photo(unsigned short int StartX, unsigned short int StartY, __prog__ unsigned char *BmpAddress)
{
__prog__ HEADCOLOR *BmpHeadr;
unsigned short int Width, Height,Column,row;
__prog__ unsigned char *BmpData;
BmpHeadr = (__prog__ HEADCOLOR *)BmpAddress;
Width = BmpHeadr->w; //177
Height = BmpHeadr->h; //100
BmpData = (__prog__ unsigned char *)(BmpAddress + sizeof(HEADCOLOR)); //sizeof表示該陣列記憶體的多少 單位是位元組 算出畫素資料在陣列中的偏移
LCD_SetPos(StartX,StartX+Width-1,StartY,StartY+Height-1);
for(Column=0;Column<Height;Column++)
{
for(row=0;row<Width;row++)
{
Write_Data(*(__prog__ unsigned short int *)BmpData);
BmpData +=2;
}
}
}
一定要注意這時候使用的是__prog__型別,而不是const型別
下面是這個函式的呼叫方法:
show_photo(0,0,gImage_100X177);
這個陣列的定義是這樣的:
__prog__ unsigned char gImage_100X177[35408] __attribute__((space(prog)))= { 0X00,0X10,0XB1,0X00,0X64,0X00,0X01,0X1B,
0XDD,0XC6,0XDD,0XC6,0XFE,0XC6,0XFD,0XCE,0XFD,0XCE,0XFE,0XCE,0X1E,0XCF,0X1E,0XCF,
0X1E,0XCF,0X1E,0XCF,0X1E,0XC7,0X1E,0XCF,0X1E,0XCF,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,
0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XCF,0X3E,0XC7,0X1E,0XC7,
0X1E,0XC7,0X1E,0XC7,0X1E,0XC7,0X3E,0XC7,0X3E,0XC7,0X3E,0XCF,0X3E,0XCF,0X5E,0XCF,
0X5F,0XCF,0X3E,0XCF,0X3E,0XCF,0X3E,0XCF,0X3F,0XCF,0X3E,0XC7,0X3F,0XCF,0X3F,0XCF,
0X3F,0XC7,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,0X5E,0XCF,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,
現在我們可以看看實驗效果了:
下面上傳本實驗的程式,這個程式的主晶片是PIC24FJ256DA210,液晶型號是S663DE,模組型號是深圳愛維信公司的IGF240320MC28N01
程式碼用好壓軟體分成了兩份壓縮檔案:
http://download.csdn.net/detail/chengdong1314/9552679
http://download.csdn.net/detail/chengdong1314/9552680
下面是取模軟體和圖片:
http://download.csdn.net/detail/chengdong1314/9552683