c/c++语言开发共享编译时间浮动打包/打孔

我正在为PIC32MX编​​写C语言,使用Microchip的PIC32 C编译器(基于GCC 3.4)编译。

添加我以下的标准是GNU99(带GNU扩展的C99,编译器标志-std=gnu99

我的问题是:我有一些可重新编程的数字数据存储在EEPROM或芯片的程序闪存中。 这意味着当我想存储浮动时,我必须做一些类型的惩罚:

 typedef union { int intval; float floatval; } IntFloat; unsigned int float_as_int(float fval) { IntFloat intf; intf.floatval = fval; return intf.intval; } // Stores an int of data in whatever storage we're using void StoreInt(unsigned int data, unsigned int address); void StoreFPVal(float data, unsigned int address) { StoreInt(float_as_int(data), address); } 

我还将默认值包含为编译时常量数组。 对于(无符号)整数值,这是微不足道的,我只使用整数文字。 但是对于浮点数,我必须使用这个Python代码段将它们转换为它们的单词表示forms,以将它们包含在数组中:

 import struct hex(struct.unpack("I", struct.pack("f", float_value))[0]) 

…所以我的默认数组有这些难以理解的值,如:

 const unsigned int DEFAULTS[] = { 0x00000001, // Some default integer value, 1 0x3C83126F, // Some default float value, 0.005 } 

(这些实际上采用X宏构造的forms,但这在这里没有区别。)评论很好,但是有更好的方法吗? 能够做到这样的事情真是太好了:

 const unsigned int DEFAULTS[] = { 0x00000001, // Some default integer value, 1 COMPILE_TIME_CONVERT(0.005), // Some default float value, 0.005 } 

……但我完全不知所措,我甚至不知道这样的事情是否可能。

笔记

    你可以让你的DEFAULTS数组成为一个IntFloat数组吗?

    如果可以, 并且您的编译器支持C99,那么您可以这样做:

     const IntFloat DEFAULTS[] = { { .intval = 0x00000001 }, // Some default integer value, 1 { .floatval = 0.005 }, // Some default float value, 0.005 }; 

      以上就是c/c++开发分享编译时间浮动打包/打孔相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550128.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐