c语言 memcpy
c语言memset,memcpy中,后面数据长度的单位是Byte
int a; // c语言中int占32bite=4字节
int b;
memcpy(a, b, 4); // 把b的值赋给a
char a; // c语言中char占8bit=1字节
char b;
memcpy(a, b, 1);
c语言中的数据类型
1.整型
有符号: int --4Byte; short --2Byte; long --4Byte; long long -8Byte;
无符号:unsigned int --4Byte; unsigned short --2Byte; unsigned long --4Byte; unsigned long long --8Byte;
2.字符型
char --1Byte;
3.浮点型
单精度浮点型:float --4Byte
双精度浮点型:double --8Byte
常用定义
int8_t : typedef signed char; //one byte = 1*8 bits
uint8_t : typedef unsigned char; //0~255
int16_t : typedef signed short ; // two bytes = 2*8 bits
uint16_t : typedef unsigned short ; //0~65,535
int32_t : typedef signed int; // four bytes = 4*8 bits
uint32_t : typedef unsigned int; //0~4,294,967,295
int64_t : typedef signed long; // 8 bytes = 8*8 bits
uint64_t : typedef unsigned long; //0~18,446,744,073,709,551,615
空间分配
struct student {
int age;
int height;
};
sizeof(struct student Tom); // 8Byte,sizeof的返回值单位也是Byte
sizeof(struct student *s); // 看编译器给指针分配多少内存;一般来说是void类型,即4Byte
数据定点化
int16_t a; // a是16bit数
// 用a来代替一个小数(硬件进行取值)
// 若小数的精度是1024,即1024=1,那么需要占用10bite位;低10位为小数位,高5位为整数位,最高位为符号位
// a可以代表的数值为-32~31.999...
// a = 0000 0100 0000 0000 时,实际值为1
// a = 0000 0110 0000 0000 时,实际值为1.5
二进制与2的次幂
1111 1111 (二进制) = 255 (十进制) // 8位二进制的最高位是2^7,注意是7次幂
// 所以上面定点化的时候,二进制的第11位(2^10=1024)为1的时候,实际十进制是1,二进制的第10位(2^9=512)为1的时候是实际十进制0.5
c语言中的除法和右移位
int(3/2) = 1;
int(-3/2) = -2; // 除法是向下取整
(3>>2) = 1;
(-3>>2) = -1; // 右移之后后面的值都丢掉不用
看代码的时候多关注这个函数的输入输出及输入输出数据的流向会好懂很多
多注意数据的长度大小
题外话:板子和电脑工具之间有个服务端,这个服务端会调用板子里的驱动文件,所以fireware里的传出函数里的指向需要传出的数据指针会给到服务端,服务端会把参数传给工具。