大小端、float与0作比较、IIC互斥、printf

1 大小端

大端模式(Big Endian):数据的字节,保存在内存的地址中;数据的字节,保存在内存的地址中。

小端模式(Little Endian):数据的字节,保存在内存的地址中;数据的字节,保存在内存的地址中。

例如:

16位宽的数0x1234,在不同的模式下,存储方式为:

 0x40000x4001
小端模式0x340x12
大端模式0x120x34

32位宽的数0x12345678,在不同的模式下,存储方式为:

 0x40000x40010x40020x4003
小端模式0x780x560x340x12
大端模式0x120x340x560x78

2 四舍五入+float与0作比较

对一个float的数进行四舍五入,返回一个int类型的值

1 float不能直接与0作比较,要与一个无限接近0的float型进行比较,如下面代码中的float变量EPSINON

2 正数和负数的四舍五入方法不同

static int16_t temp_mv_to_deg_c(uint32_t value_mv)
{
    float temp_sample = 0;
    const float EPSINON = 0.00001;
    temp_sample = (RESISTENCEUP * 1.0) / RESISTENCENORMAL; //R/R0
   
    ...
    ...
    ...

    ...
    int16_t camera_temp;
    if (temp_sample > EPSINON){
        camera_temp = (int)(temp_sample+0.5); //正数四舍五入
    } else if (temp_sample < EPSINON){
        camera_temp = (int)(temp_sample-0.5); //负数四舍五入
    } else {
        camera_temp = 0;
    }

    return camera_temp;
}

3 IIC互斥

当不同的线程需要用到同一路IIC去进行数据的读写时,需要进行IIC的保护

在用之前需要去获取IIC的使用权,获取到之后再进行相应的IIC读写操作,操作完后再释放IIC,以供其他线程再去使用

4 printf

printf不能随便用,尤其用在周期性比较短的执行函数中,printf是阻塞性的执行,是先执行完printf再将打印内容传给串口,然后再执行其他的,如果本身函数执行周期较短,则可能导致后面的函数还没执行就又到了下一个周期,导致程序卡死,尽量使用系统中自带的log输出函数,是将log copy到队列中,然后等队列满了再一起输出,而不是抢占性的输出,这样不会抢占别的函数的执行。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值