编程注意事项-记踩过的坑

1、C标准库<string.h>    中的memcpy(dest, src,n);n是以字节为单位;

如果你拷贝的目标和目的都是short型(16位),那么就是要拷贝的数据乘以2,其它数据类型类似。

uint16_t dest[5];
uint16_t src[5] = {0x1234, 0x2345, 0x3456, 0x4567, 0x5678};

memcpy(dest,src,5*2);

  

 2、当然还有void *memset(void *s,  int c, size_t n); 也是以字节为单位处理的,所以

char a[5];
short b[5];

memset(a,1,5);
memset(b,1,5);

结果
a[] = {1,1,1,1,1};
b[] = {0x0101,0x0101,0x0100,0x0000,0x0000};

结果a是对的,b就错了。

 3、IIC使用时,STAR要留足够的时间给从芯片反应,后面的通讯时钟可以很快,但Star一定要慢一点。

4、数据合并时要注意运算符的优先级u16 temp;

u8 buff[2];
buff[0] = 0x01;
buff[1] = 0x02; temp
= buff[0]<<8 + buff[1];//由于加减运算优先级高于左移运算,所以结果是 0x0400; temp = (buff[0]<<8) + buff[1]; 或者 temp = buff[0]<<8 | buff[1];
结果是0x0102; 就可以,因为第一个括号优先级最高,第二个
|的优先级低于<<

 

posted @ 2021-08-14 15:26  上官梦舞  阅读(29)  评论(0编辑  收藏  举报