[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;
}
运行效果:[注意变量的位数]

相关文章:
[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,//…...
热迁移中VirtIO-PCI设备的配置空间处理
文章目录 问题现象定位过程日志分析源端目的端 原理分析基本原理上下文分析复现分析patch分析 总结解决方案 问题现象 集群升级虚拟化组件版本,升级前存量运行并挂载了virtio磁盘的虚拟机集群内热迁移到升级后的节点失败,QEMU报错如下: 202…...
模拟滤波器的基础知识和设计
信号处理工作中滤波器的应用是非常广泛的,可以分成模拟滤波器和数字滤波器两种,数字滤波器主要包括两种,IIR和FIR,这两种滤波器后面统一说,今天先来说一说模拟滤波器(主要是我先用Python实现了Matlab书里面…...
机器学习基础-Pandas学习笔记
Pandas Python的数据分析库,与Numpy配合使用,可以从常见的格式如CSV、JSON等中读取数据。可以进行数据清洗、数据加工工作。数据结构Series,Pandas.Series(data,index,dtype,name,copy) data类型是Numpy的ndarray类型,index指定下…...
【GIT版本控制】--协作流程
一、Fork与Pull Request Git协作流程中的关键概念包括Fork和Pull Request,它们允许多人在项目中协作并贡献代码。以下是关于Fork和Pull Request的简要总结: 1. Fork: Fork是指复制一个Git仓库,通常是一个开源项目的仓库…...
简析Cookie、Session、Token
手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/133498756 文章目录 简析Cookie、Session、Token什么是 Cookie ?什么是 Session ?Cookie 和 Session 到底是…...
加速attention计算的工业标准:flash attention 1和2算法的原理及实现
transformers目前大火,但是对于长序列来说,计算很慢,而且很耗费显存。对于transformer中的self attention计算来说,在时间复杂度上,对于每个位置,模型需要计算它与所有其他位置的相关性,这样的计…...
小程序获取用户手机号
在小程序中获取用户手机号需要以下步骤: 首先需要授权用户手机号,即在小程序中调用 wx.login() 方法获取用户的登录凭证,在回调函数中调用 wx.getUserInfo() 方法获取用户的个人信息,并且设置 withCredentials 参数为 true。 在获…...
Zama的fhEVM:基于全同态加密实现的隐私智能合约
1. 引言 Zama的fhEVM定位为: 基于全同态加密实现的隐私智能合约 解决方案 开源代码见: https://github.com/zama-ai/fhevm(TypeScript Solidity) Zama的fhEVM协议中主要包含: https://github.com/zama-ai/tfhe-…...
Mac M1安装ROS1或ROS2
1.首先进入Anaconda官网,安装Anaconda 2.创建、激活并配置环境 #创建环境 conda create -n ROS #激活环境 conda activate ROS #配置环境 conda config --add channels conda-forge conda config --add channels robostack conda config --set channel_priority st…...
[NISACTF 2022]popchains - 反序列化+伪协议
[NISACTF 2022]popchains 一、解题流程二、小小疑惑 一、解题流程 1、链条:Road_is_Long(construct->wakeup【page$r】-> toString【string$m】)-> Make_a_Change(construct->get【effort$t】)-> Try_W…...
分贝定义简介
一、什么是分贝 辅助单元Bel表示任何给定部件、电路或系统的输入和输出之间的对数比L,并且可以用电压、电流或功率来表示: 如果使用场量(电压或电流)代替功率量,则: 我们可以将增益或损耗因子相加为正或负dB值,而不是将其乘以比率。 分贝与功率转化的速读表如下所示:…...
socket简介
套接字(Socket)实质上就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,为应用层进程利网络协议交换数据提供了相应机制。套接字出于承上启下的作用,向上连接应用进程…...
【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Fri, 6 Oct 2023 Totally 29 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚ContactGen, 基于生成模型的抓取手势生成,类人五指手。(from 伊利诺伊大学 香槟) 数据集:GRAB da…...
七、互联网技术——SQL查询
文章目录 一、基础查询二、高级查询三、SQL视图一、基础查询 某学校的教学信息关系数据库中有如下两个表(表的名字和字段均用中文名字)学生表(学号,姓名,性别,专业)成绩表(学号,课程名,分数)用SQL语句表达下述查询:[问题1]检索分数高于80分的所有学生的学号和分数select 学…...
1.6 计算机网络的性能
思维导图: 1.6.1 计算机网络的性能指标 前言: 我的理解: 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先,计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外,还有一些非性能特征…...
小程序中如何核销订单和优惠券
小程序已成为许多商家线上线下开展业务的重要渠道。客户在小程序中下单/领券后,可能需要商家现场扫码核销,例如超市购物、卖票、游乐园等线下场景。下面就介绍小程序中如何核销订单和优惠券。 一、订单核销 订单核销是指商家在小程序中确认顾客已经支付…...
211 毕业就入职 30 人的小公司是什么体验
为什么“选择”了 30 人的小公司? 作为一个 211 毕业的学生,进入 30 人的小公司不管是 8 年前还是现在,应该都是比较稀少的,但是当面的我阴差阳错进了这样一个小公司。 为什么我选择进入这样一个 30 人的小公司呢?主…...
aardio 读取 Excel文件,显示在 listview 中
编写 main.aardio 如下 import win.ui; /*DSG{{*/ winform win.form(text"excel1";right801;bottom500) winform.add( button1{cls"button";text"读取Excel文件";left19;top14;right126;bottom44;z1}; button2{cls"button";text&quo…...
Web:前端常用的几种Http请求GET和POST样例
1、简述 在Web开发过程中,少不了发起Http请求服务端的接口数据,在不同的框架中使用了不同的Http请求方式,常用的请求有fetch、 ajax、 axios、XMLHttpRequest、request,以下样例仅供参考。 2、Fetch Fetch API 是一种 JavaScr…...
发现开源神器:三步解锁卡车模拟器的智能驾驶新纪元
发现开源神器:三步解锁卡车模拟器的智能驾驶新纪元 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist 你是否曾梦想在…...
Java 开发 - Java 静态方法调用类初始化规则观察记录
Java 静态方法调用类初始化规则观察记录 1、基本介绍 静态方法调用不会触发子类的初始化,只会触发声明该方法的类及其父类的初始化 2、观察记录 (1)测试 1 public class CommonStore {static {System.out.println("CommonStore static e…...
Browser-Use:基于LLM的智能浏览器自动化框架入门与实践
1. 项目概述:当AI学会“上网冲浪” 如果你和我一样,在过去的几年里尝试过各种RPA工具或者写爬虫脚本来处理网页上的重复性工作,那你一定对那种“脚本一跑就崩,网站一改版就废”的体验深有感触。我们总在幻想,要是能直…...
RISC-V在AI与边缘计算领域的崛起:从开放架构到异构计算新范式
1. RISC-V在AI与边缘计算领域的崛起:一场意料之中的“超预期” 如果你最近关注处理器架构的新闻,大概率会被“RISC-V在AI领域超预期增长”这类标题刷屏。这不仅仅是媒体的噱头,而是正在硅谷和全球半导体设计实验室里发生的真实故事。作为一名…...
环境配置与基础教程:梯度累积技术落地:在显存受限条件下用梯度累积模拟大 batch 训练,精度无损
引言:当显卡“钱包”不够鼓,我们如何训练大模型? 2025年底到2026年初的AI开发者社区里,一个反复被追问的问题是:“我用RTX 3060/4060(12GB显存)能微调LLaMA-7B吗?”另一个高赞回答总会提到同一个关键词——梯度累积(Gradient Accumulation)。根据CSDN技术社区2026年…...
TypeScript领域建模实战:基于斯坦福本体论七步法构建健壮数据模型
1. 项目概述如果你和我一样,在TypeScript项目里摸爬滚打了几年,肯定遇到过这样的场景:面对一个全新的业务领域,老板让你“设计一下数据模型”,你打开一个空白的types.ts文件,光标闪烁,大脑一片空…...
电动汽车充电站控制系统的Intel处理器实践与优化
1. 电动汽车充电站的技术架构解析电动汽车充电站作为新型能源基础设施的核心节点,其技术实现远比传统加油站复杂。一个完整的充电站系统通常包含三个层级:电力转换模块(AC/DC)、控制管理系统(CMS)和云端服务…...
聊天机器人技能并行化框架设计与实现:提升响应效率的异步编程实践
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫mvanhorn/clawdbot-skill-parallel。乍一看这个仓库名,又是“clawdbot”又是“skill-parallel”,感觉像是某种机器人或自动化工具。没错,这正是它的核心。简单来说&…...
基于MCP协议与WebDAV构建AI智能体统一数据访问层
1. 项目概述与核心价值最近在折腾个人知识库和自动化工作流时,我又一次被“数据孤岛”问题绊住了脚。手头的信息散落在各种地方:Notion里的项目规划、Obsidian的零散笔记、Google Calendar的日程、甚至是一些本地文件夹里的PDF和图片。想要让这些数据联动…...
dotfiles工程化:用Git与符号链接打造可移植的开发环境
1. 项目概述:dotfiles 是什么,以及为什么你需要它如果你在终端里敲命令的时间超过了你用鼠标点来点去的时间,那你大概率已经听说过dotfiles了。简单来说,dotfiles就是你系统里那些以点(.)开头的配置文件&am…...
