最近将部分在应用程序上验证通过的代码移植到bootloader上,发现与预期结果不同,比较奇怪;

应用端代码如下:

static float inputVolt1  = 1.240;  //set at first
static float inputVolt2 = 2.313;  //set at first

static void calculateReferVolt(u16 reg1, u16 reg2)
{
    float k=0.000;
    float b=0.000;
    u32 u32_k = 0;
    u32 u32_b = 0;

k = (inputVolt2 - inputVolt1)*8192*1.2/(reg2-reg1);
    b = (inputVolt1 - (reg1 - 8192)*(inputVolt2 - inputVolt1)/(reg2 - reg1));
    printf("k: %.4f\r\n", k);
    printf("b: %.4f\r\n", b);
    u32_k = k*10000;
    u32_b = b*10000;
    tls_fls_write(ADDR_K, (char*)&u32_k, 4);
    tls_fls_write(ADDR_B, (char*)&u32_b, 4);
}

以上代码在应用代码中验证可用,计算出来的k & b的值也与预期相符,但是将其移植到bootloader中以后,发现计算出来的k & b的值不对,也很奇怪,没找到原因。最后通过将两个全局变量修改成宏,才得出正确的k & b的值。定义成宏以后,编译阶段会完成一部分计算,应该与此有关,具体的没去深究。移植并修改后的代码如下:

#define INPUT_VOLTAGE_1  0.4
#define INPUT_VOLTAGE_2  3.0

static void calculateReferVolt(u16 reg1, u16 reg2)
{
    float k=0.000;
    float b=0.000;
    u32 refer_k = 0;
    u32 offset_b = 0;
    u32 adc_k_b = 0;

k = (INPUT_VOLTAGE_2 - INPUT_VOLTAGE_1)*8192*1.2/(reg2-reg1);
    b = (INPUT_VOLTAGE_1 - (reg1 - 8192)*(INPUT_VOLTAGE_2 - INPUT_VOLTAGE_1)/(reg2 - reg1));

refer_k = k*10000;
    offset_b = b*10000;
    ( refer_k<20000 || refer_k>25000 )?( refer_k=22500 ):( refer_k=refer_k );
    ( offset_b<14000 || offset_b>18000 )?( offset_b=15840 ):( offset_b=offset_b );
    
    adc_k_b = (refer_k<<16);
    adc_k_b = adc_k_b+offset_b;
    ft_param_set(CMD_ADC_K_B, &adc_k_b, 4);
    adc_k_b = 0;
    ft_param_get(CMD_ADC_K_B, &adc_k_b, 4);

uart0PutsCom("adc_k_b:");
    printint(adc_k_b);
    uart0PutsCom("\r\n");
    uart0PutsCom("adc write done\r\n");
}

若有过往能者,还望指点迷津。

记一次WiFi芯片W600上的一个浮点运算相关推荐

  1. 记一次WiFi芯片W600上串口只能回显的问题

    最近调试芯片时,出现一个奇怪的问题.设备在运行过程中,突然串口无日志输出,云端也掉线. 通过串口工具向其发送命令,它却是发什么回什么,之前支持的指令全部无效了! 最后,硬件的同事量了量电压,发现电源电 ...

  2. WiFi连不上的一个原因

    家里面的WIFI,个别手机可以连上啊,个别手机又连不上,这个应该你设置了中文之类的SSID,手机不能识别中文SSID,你可以改为英文数字SSID.

  3. 关于智能家居、360wifi、wifi开关,以及wifi芯片的选择

    智能家居的愿景很早之前就有了,梦想着我们在打完球回家的路上就提前打开热水器,烧好水,到家就可以洗澡了:在回家的路上就可以打开空调,到家就可以乘凉了... 但智能家居这种愿景要想实现需要太多技术上的进步 ...

  4. 芯片验证漫游指南_博通Wi-Fi芯片被曝安全漏洞,超10亿台终端或受影响,苹果、谷歌、小米、华为等大厂在列...

    知名电脑安全软件公司 ESET 的研究人员在 Wi-Fi 芯片中发现了一个先前未知的漏洞,并将其命名为 Kr00k.保守估计,这一漏洞将涉及超过 10 亿台支持 Wi-Fi 的设备和接入点. 据科技媒 ...

  5. 【上电即上华为云】(视频演示)语音识别、RISC-V架构WiFi芯片、LCD显示屏融合案例

    [摘要] [上电即上华为云](视频演示)语音识别.RISC-V架构WiFi芯片.LCD显示屏融合案例 语音识别芯片,RISC-V架构WiFi芯片,LCD显示屏,华为云融合案 语音识别将改变我们的生活! ...

  6. 记一次windows10电脑连上wifi无法上网的解决问题

    前言 今天下午同学的电脑能连上wifi,但是却上不了互联网 开始思考 首先想到的肯定是WiFi驱动问题,但是wifi能连上大部分的原因可能就不是驱动问题了,为了彻底排除这个因素,我用到了我的usb网卡 ...

  7. [OpenHarmony RK3568](四)WIFI芯片适配

    文章目录 一.概述 1.1 WLAN固件 1.2 nvram.txt 二.内核部分 2.1 修改设备树 2.2 内核配置部分 三.系统适配部分 一.概述   本文讲述RK3568上移植OpenHarm ...

  8. 苹果iOS 10.3.1修复博通Wi-Fi芯片重大安全漏洞

    如果你还没有将设备升级到 iOS 10.3.1 的话,那么现在是个机会了.因为不久前发布的 iOS 10.3.1,修复了 iPhone 中博通 Wi-Fi 芯片的一个重大安全漏洞,该安全漏洞可能会使在 ...

  9. 嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了

    在物联网万物互联的驱动下,无可厚非,嵌入式WiFi芯片市场成为了"引爆点",预计2016年的总出货量将达到1亿颗.面对如此巨大的"诱惑",国内外WiFi芯片企业 ...

最新文章

  1. 【SmartJob】【隔离】每天定时掉线问题解决:隔离定期重启脚本更新
  2. JS使png背景图片透明
  3. 8后淡入淡出没有了_8·30广州岑村ufo事件,人为制作的造假视频
  4. 微服务架构设计模式~根据业务能力进行服务拆分
  5. Mvvm、第一个Vue程序、Vue基本语法
  6. [转]Microsoft SQL Server 自定义函数整理大全
  7. linux修改py内容,python中修改文件行内容
  8. pythonfromlxml导入html_Python爬虫日记二:使用lxml解析HTML输出对应值
  9. C++安全方向(二):2.5 Base58_比特币钱包地址_算法分析
  10. MongDB之shard_主从,副本集,分片的理解
  11. WEB测试—功能测试
  12. SQL Server job突然不工作了
  13. linux 清除mysql relay_MySQL 小版本升级
  14. mysql死锁抛出异常_如何排查和处理 MySQL 死锁异常?详细分析及解决方法步骤
  15. vue3 main.js引入 axios_Vue3.0新特性探索
  16. bl系列刀片(blade)服务器,HPE Integrity BL870c i6 刀片服务器
  17. HTTP长连接和短连接
  18. 无线网卡驱动正常却搜索不到无线信号
  19. EDUCoder编程练习题解(结构体)
  20. jitpack.io 无法访问或下载依赖库

热门文章

  1. 结构体成员地址获得结构体起始地址
  2. [算法]——归并排序(Merge Sort)
  3. [LintCode] Wildcard Matching
  4. @清晰掉 GNU C __attribute__
  5. 前端性能优化:使用媒体查询加载指定大小的背景图片
  6. 标准模板库(STL)学习指南之List链表
  7. 上证所Level-2在信息内容和传送方式方面的比较优势[逐笔数据与分笔数据的根本区别]...
  8. 同软件多个线程设置不同ip_中学校园广播-中学IP网络广播系统解决方案
  9. 是否可能有一台算力无穷大的计算机?
  10. 用于计算机视觉领域的python第三方库是什么_大量Python开源第三方库资源分类整理,含菜鸟教程章节级别链接...