關於C語言傳遞引數的問題

2021-08-02 20:58:31 字數 877 閱讀 6012

要求:編寫乙個函式,將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 迴圈結...