STM32中的memcpy函式的使用

2021-10-23 18:38:24 字數 2273 閱讀 5546

最近在用jy61做乙個傾角專案。剛好商家那裡有個示例**有寫這個函式。正好給大家講下這個函式是怎麼用的。

上面這個圖呢,是我從商家那裡擷取出來的。什麼意思呢***給大家講下。

memcpy 函式用於 把資源記憶體(src所指向的記憶體區域) 拷貝到目標記憶體(dest所指向的記憶體區域);拷貝多少個?有乙個size變數控制拷貝的位元組數;

函式原型:void *memcpy(void *dest, void *src, unsigned int count);

簡單來說呢就是把void *src內的資料複製到void *dest裡面。unsigned int count這個的意思就是說要從void *src複製多少個位元組的資料到void *dest。

可以拷貝任何型別的物件,因為函式的引數型別是void*(未定義型別指標),也就是說傳進去的實參可以是int*,short*,char等等,但是由於函式拷貝的過程是乙個位元組乙個位元組的拷貝的,所以實際操作的時候要把void強制轉化為char*,這樣在指標加的時候才會保證每次加乙個位元組

4 實際應用示例

void

*memcpy1

(void

*desc,

const

void

* src,size_t size)

unsigned

char

*desc1 =

(unsigned

char

*)desc;

unsigned

char

*src1 =

(unsigned

char

*)src;

while

(size--

>0)

return desc;

}int

_tmain

(int argc, _tchar* ar**)

;const

char src[5]

="1234"

;//printf(src);

memcpy1

(dest,src,

sizeof

(src));

//*(dest+5) = '/0';

printf((

char

*)dest)

;int m =-1

;return0;

}

(1)void* 一定要返回乙個值(指標),這個和void不太一樣

(2)首先要判斷指標的值不能為空,desc為空的話肯定不能拷貝記憶體空間,src為空相當於 沒有拷貝;所以之間return掉;

(3)""空串是指內容為0,null是0,不是串;兩個不等價;

(4)int dest[2] = ;這是對int 型別的陣列初始化的方法;如果是char型別,就用char a[5] = 「1234」; 注意陣列下標要 多於實際看到的字元數,因為還有』/0』

(5)printf((char )dest);這句話,是把 char 型別 src 傳到 int 型別的 dest的記憶體強制轉化成char型別,然後列印出來 因為直接看int型別的dest是看不到裡面的內容的;因為有unsigned char desc1 = (unsigned char)desc;所以字元可以傳到dest裡面儲存起來,dest所指向的記憶體長度4個位元組,強制轉化為char 就是把四個位元組分成乙個乙個的位元組,這樣就可以看到乙個個字元了,如果定義成char dest[5] = 「1234」;就不用轉化;

(6)memcpy1(dest,src,sizeof(src));注意裡面的sizeof(src),這個是包括字串的結束符』/0』的;所以不用擔心printf(dest);但是如果用memcpy1(dest,src,4);沒有』/0』就要(dest+5) = 『/0』;這樣保證是乙個完整的字串;

(7)如果初始化的時候:

char dest[1024] = 「12345666」;//;

const char src[5] = 「3333」;

那麼拷貝的時候,如果用memcpy1(dest,src,sizeof(src));則printf(dest);出來是333; 如果memcpy1(dest,src,4);則printf(dest);出來是33335666;因為上面的sizeof(src),包含』/0』,所以拷貝過去的字串以』/0』 結束,就只有3333,而如果傳4個字元,』/0』是第五個字元,那就遇到dest[1024] 的』/0』結束,所以是33335666字串的』/0』問題一定要注意啊!!!

STM32復位函式

軟體復位 void g mcureset void 其實hal nvic systemreset是 void hal nvic systemreset void 其實nvic systemreset是 static inline void nvic systemreset void 系統復位 那麼核...

STM32學習之 stm32中C語言的資料型別

stm32 c語言資料型別 在程式設計過程中,不同的cpu,其資料型別的意義各不相同,所以一定要注意相應變數資料型別的定義和轉換,否則在計算中可能會出現不確定的錯誤。一 c語言中的種類資料 整型 int short long 實型 float double stm32中的資料型別非常的多,常用的變數...

STM32中如何使用printf 函式

stm32串列埠通訊中使用printf傳送資料配置方法 開發環境 keil rvmdk 在stm32串列埠通訊程式中使用printf傳送資料,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬體訪真時無法進入main主函式,其實只要簡單的配置一下就可以了。下面就說一下使用printf需要做哪些...