码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [C]嵌入式中变量存储方案


    1. #include
    2. #define ENUM_VAR_U8(v) v
    3. #define ENUM_VAR_U16(v) v,v##__end=v+1
    4. #define ENUM_VAR_U24(v) v,v##__end=v+2
    5. #define ENUM_VAR_U32(v) v,v##__end=v+3
    6. #define ENUM_VAR_U8e(v,e) v=e
    7. #define ENUM_VAR_U16e(v,e) v=e,v##__end=v+1
    8. #define ENUM_VAR_U24e(v,e) v=e,v##__end=v+2
    9. #define ENUM_VAR_U32e(v,e) v=e,v##__end=v+3
    10. //用户自定义变量名字,用于存储
    11. typedef enum
    12. {
    13. ENUM_VAR_U8e(first_member,0),//first_member = 0,//首元素
    14. ENUM_VAR_U16(my_varA),
    15. ENUM_VAR_U24(my_varB),
    16. ENUM_VAR_U32(my_varC),
    17. MAX_VAR_LEN,//===Keep this enum last===
    18. }TagEnumVar;
    19. uint8_t g_var[MAX_VAR_LEN];//此数组作为全局变量,用于file/flash读写。
    20. void get_var(TagEnumVar id,void* value_out,uint8_t var_bytes )
    21. {
    22. if(var_bytes==1)
    23. {
    24. uint8_t *value_ex =(uint8_t*)value_out;
    25. *value_ex = g_var[id];
    26. }
    27. else if(var_bytes==2)
    28. {
    29. uint16_t *value_ex =(uint16_t*)value_out;
    30. *value_ex = g_var[id] | (g_var[id+1]<<8);
    31. }
    32. else if(var_bytes==3)
    33. {
    34. uint32_t *value_ex =(uint32_t*)value_out;
    35. *value_ex = g_var[id] | (g_var[id+1]<<8) | (g_var[id+2]<<16);
    36. }
    37. else if(var_bytes==4)
    38. {
    39. uint32_t *value_ex =(uint32_t*)value_out;
    40. *value_ex = g_var[id] | (g_var[id+1]<<8) | (g_var[id+2]<<16)| (g_var[id+3]<<24);
    41. }
    42. }
    43. void set_var(TagEnumVar id,uint32_t value_in,uint8_t var_bytes )
    44. {
    45. if(var_bytes==0)
    46. return;
    47. if(var_bytes>=1)
    48. g_var[id]=(value_in)&0xFF;
    49. if(var_bytes>=2)
    50. g_var[id+1]=(value_in>>8)&0xFF;
    51. if(var_bytes>=3)
    52. g_var[id+2]=(value_in>>16)&0xFF;
    53. if(var_bytes>=4)
    54. g_var[id+3]=(value_in>>24)&0xFF;
    55. }
    56. int main()
    57. {
    58. printf("=======C_BuildTime=[%s_%s]==============\r\n\r\n",__DATE__ ,__TIME__ );
    59. //note:可以追加上电后,从file/flash加载数据到g_var里作为初始值
    60. uint8_t u8_in = 0x11;
    61. uint8_t u8_ot = 0x00;
    62. uint16_t u16_in = 0x1234;
    63. uint16_t u16_ot = 0x00;
    64. uint32_t u24_in = 0x123456;
    65. uint32_t u24_ot = 0x00;
    66. uint32_t u32_in = 0x12345678;
    67. uint32_t u32_ot = 0x00;
    68. //先将数据写入,然后读出来看看是否一致
    69. set_var(first_member,(uint32_t)u8_in,1);
    70. get_var(first_member,&u8_ot,1);
    71. printf("get u8,first_member=0x%x.\n",u8_ot);//测试1字节变量的读和写
    72. set_var(my_varA,(uint32_t)u16_in,2);
    73. get_var(my_varA,&u16_ot,2);
    74. printf("get u16,my_varA=0x%x.\n",u16_ot);//测试2字节变量的读和写
    75. set_var(my_varB,(uint32_t)u24_in,3);
    76. get_var(my_varB,&u24_ot,3);
    77. printf("get u24,my_varB=0x%x.\n",u24_ot);//测试3字节变量的读和写
    78. set_var(my_varC,(uint32_t)u32_in,4);
    79. get_var(my_varC,&u32_ot,4);
    80. printf("get u32,my_varC=0x%x.\n",u32_ot);//测试4字节变量的读和写
    81. //note:可以追加,关闭程序前,保存g_var数据到对应的file/flash里
    82. return 0;
    83. }

    运行效果:[注意变量的位数] 

    注:C语言的文件读写可以参考:

    C 读写文件内容_c读取当前文件夹内文件-CSDN博客 

  • 相关阅读:
    Magisk隐藏外挂解决方案
    Java架构该如何进阶?还在东拼西凑的学习?这份进阶指南相信会对你有所帮助,十多位资深大佬独家秘籍一并传授!
    【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
    阿里云-云服务器ECS新手如何建网站?
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java新能源汽车销售管理系统gooct
    Spring Boot中的@Controller使用教程
    tsconfig编译属性isolatedModules的作用
    Python中关于文件的操作,一篇就够了
    项目实战:中央控制器实现(2)-优化Controller,将共性动作抽取到中央控制器
    坚持100天学习打卡Day1
  • 原文地址:https://blog.csdn.net/wabil/article/details/133590475
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号