编程注意事项-记踩过的坑
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; 就可以,因为第一个括号优先级最高,第二个|的优先级低于<<