当前位置: 首页 > news >正文

[C]嵌入式中变量存储方案

#include<stdio.h>#define uint8_t   unsigned char
#define uint16_t  unsigned short
#define uint24_t  unsigned int
#define uint32_t  unsigned int
#define uint64_t  unsigned long long//用户自定义变量名字,用于存储
typedef enum
{first_run = 0,//1字节hot_level,hot_level_end = hot_level+1,//2字节 u16water_value,water_value_end = water_value+2, //3字节 u24 coffee_value,coffee_value_end = coffee_value+3,//4字节 u32MAX_VAR_LEN,//Keep it last
}TagEnumVar;uint8_t g_var[MAX_VAR_LEN];void get_var_u8(TagEnumVar id,uint8_t* value_out )
{*value_out = g_var[id];
}void get_var_u16(TagEnumVar id,uint16_t* value_out )
{*value_out = g_var[id] | (g_var[id+1]<<8);
}void get_var_u24(TagEnumVar id,uint32_t* value_out )
{*value_out = g_var[id] | (g_var[id+1]<<8) | (g_var[id+2]<<16);
}void get_var_u32(TagEnumVar id,uint32_t* value_out )
{*value_out = g_var[id] | (g_var[id+1]<<8) | (g_var[id+2]<<16) | (g_var[id+3]<<24);
}void set_var_u8(TagEnumVar id,uint8_t value_out )
{g_var[id]=value_out;
}void set_var_u16(TagEnumVar id,uint16_t value_out )
{g_var[id]=(value_out)&0xFF;g_var[id+1]=(value_out>>8)&0xFF;
}void set_var_u24(TagEnumVar id,uint32_t value_out )
{g_var[id]=(value_out)&0xFF;g_var[id+1]=(value_out>>8)&0xFF;g_var[id+2]=(value_out>>16)&0xFF;
}void set_var_u32(TagEnumVar id,uint32_t value_out )
{g_var[id]=(value_out)&0xFF;g_var[id+1]=(value_out>>8)&0xFF;g_var[id+2]=(value_out>>16)&0xFF;g_var[id+3]=(value_out>>24)&0xFF;     
}int main()
{printf("=======C_BuildTime=[%s_%s]==============\r\n\r\n",__DATE__ ,__TIME__ );uint32_t value_in = 0x12345678;uint32_t value_out = 0x00;//先将数据写入,然后读出来看看是否一致set_var_u8(first_run,(uint8_t)value_in);get_var_u8(first_run,(uint8_t*)&value_out);printf("get u8,first_run=0x%x.\n",value_out);//测试8位数据的读和写set_var_u16(hot_level,(uint16_t)value_in);get_var_u16(hot_level,(uint16_t*)&value_out);printf("get u16,hot_level=0x%x.\n",value_out);//测试16位数据的读和写set_var_u24(water_value,(uint32_t)value_in);get_var_u24(water_value,(uint32_t*)&value_out);printf("get u24,water_value=0x%x.\n",value_out);//测试24位数据的读和写set_var_u32(coffee_value,(uint32_t)value_in);get_var_u32(coffee_value,(uint32_t*)&value_out);printf("get u32,coffee_value=0x%x.\n",value_out);//测试32位数据的读和写return 0;
}

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

http://www.lryc.cn/news/184554.html

相关文章:

  • 热迁移中VirtIO-PCI设备的配置空间处理
  • 模拟滤波器的基础知识和设计
  • 机器学习基础-Pandas学习笔记
  • 【GIT版本控制】--协作流程
  • 简析Cookie、Session、Token
  • 加速attention计算的工业标准:flash attention 1和2算法的原理及实现
  • 小程序获取用户手机号
  • Zama的fhEVM:基于全同态加密实现的隐私智能合约
  • Mac M1安装ROS1或ROS2
  • [NISACTF 2022]popchains - 反序列化+伪协议
  • 分贝定义简介
  • socket简介
  • 【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
  • 七、互联网技术——SQL查询
  • 1.6 计算机网络的性能
  • 小程序中如何核销订单和优惠券
  • 211 毕业就入职 30 人的小公司是什么体验
  • aardio 读取 Excel文件,显示在 listview 中
  • Web:前端常用的几种Http请求GET和POST样例
  • clickonce 发布的winform 如何CA认证?
  • #力扣:13. 罗马数字转整数@FDDLC
  • React18入门(第一篇)——JSX、TSX语法详解
  • 【计算机基础知识】字符的编码表示
  • 【面试题精讲】Java字符型常量和字符串常量的区别?
  • 【Vue面试题六】为什么Vue中的 v-if 和 v-for 不建议一起用?
  • leetCode 674. 最长连续递增序列 动态规划 / 贪心策略
  • 数据中台实战(11)-数据中台的数据安全解决方案
  • 林沛满-TCP之在途字节数
  • HTTPS 加密工作过程
  • 校招秋招,性格和职业有关系吗?