要求:編寫乙個函式,將rgb資料顯示到tft彩屏上,rgb資料為565格式,
平台:stm32f030 lcd:st7735s
編譯平台:mdk5.14
對於這個一般的來說很多人會這麼寫
void lcd_draw_rgb(u16 x,u16 y,u16 x_size,u16 y_size,u16 *pixel)
u16 i,j;
....//此處省略的**為向lcd設定顯示記憶體區域
for(i = 0;i < x_size;i++)
for(j = 0;j < y_size;j++)
lcd_put_pixel_bytes(*pixel);
lcd_put_pixel_bytes(*(pixel >>8));
pixel++;}}
以此為例
const u8 _t_test_bmp_data=;此處為靜態bmp,rgb565的資料,用以陣列的形式存放
然後顯示 _t_test_bmp_data裡面的bmp資料,一般來說
lcd_draw_rgb(0,0,60,60,(u16*)_t_test_bmp_data);
很多人都認為這樣呼叫的話,會將_t_test_bmp_data裡面的資料顯示到相應的lcd上面,
這樣寫,有時候能夠執行,有時候則將不會執行,微控制器會復位
至於出現這個的原因如下:
當編譯器在編譯程式的時候,如果_t_test_bmp_data
這個靜態資料的起始位址是2的整數倍的話,那麼是沒有問題的
而當編譯的_t_test_bmp_data這個靜態資料的起始位址是奇數的時候,則會發生,記憶體匯流排訪問錯誤的,硬體錯誤
當產生硬體匯流排錯誤的時候,晶元一般會復位
復位會發生在這個地方
c語言傳遞引數
1.標準資料型別,int char 等。如果c傳遞的是單個資料型別,會在被調函式中重新建立乙個物件。所以,無論我們在被調函式中怎麼修改,主調函式的值不會發生變化。2.陣列。當我們傳遞的引數是乙個陣列時,c傳遞的是陣列首元素的位址。所以當我們在被調函式中做修改了,主調函式的值也會變化。3.自定義資料型...
C語言傳遞指標引數
簡單來說,指標是乙個儲存計算機記憶體位址的變數。所有的指標都儲存了記憶體位址。它們的型別只在取值時起作用。指標在c語言中是個十分重要的概念,可以搜尋相關資料進行深入學習,也可以參考 c語言指標簡介 簡單了解。c語言函式引數傳遞有兩種方式,一種是傳值呼叫,一種是傳址呼叫。那麼如果指標作為引數,應該怎麼...
Go語言傳遞變長引數
如果函式的最後乙個引數是採用.type的形式,那麼這個函式就可以處理乙個變長的引數,這個長度可以為 0,這樣的函式稱為變參函式。func myfunc a,b,arg int 這個函式接受乙個類似某個型別的 slice 的引數 詳見第 7 章 該引數可以通過第 5.4.4 節中提到的 for 迴圈結...