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

嵌入式地址对齐引入的问题和解决方法

背景

通过串口传输float类型数据,接收后将接收到的数组通过float_tval=*(float_t*)(u_buf+5)进行强制转换为float类型,概率性出错,进入了HardFault

问题原因

float为4字节对齐,uint8_t是1字节对齐,进行转换的数组位置不一定是4字节对齐的起始,所以出现HardFault。

当然,不同系统中传输过去的数据也要考虑大小端问题。STM32(常见为 Little Endian)下,低地址存放低字节;

解决方法

1.利用memcpy,将内容复制到float类型变量

#include <string.h> uint8_t u_buf22[] = {0xAA, 0x19, 0x04, 0x9E, 0x3F}; float f; memcpy(&f, u_buf22 + 1, sizeof(f)); // 安全地读取 4 字节到对齐的 float 变量 printf("value = %f\r\n", f);

2.利用uint32_t 组装再转换

uint32_t tmp = (uint32_t)u_buf22[1] | ((uint32_t)u_buf22[2] << 8) | ((uint32_t)u_buf22[3] << 16) | ((uint32_t)u_buf22[4] << 24); float f; memcpy(&f, &tmp, sizeof(f)); // 将位样复制到 float

3.利用union

union { uint32_t u; float f; } conv; conv.u = (uint32_t)u_buf22[1] | ((uint32_t)u_buf22[2] << 8) | ... ; printf("%f\n", conv.f);
http://www.cnnetsun.cn/news/643798.html

相关文章:

  • HAJIMI Gemini API代理终极指南:从零搭建智能AI服务平台
  • Qwen3-VL-2B实战教程:使用交错MRoPE提升视频推理效率
  • 3步掌握WebVOWL:从零开始的本体可视化实战指南
  • 零基础也能上手!YOLOv12官方镜像保姆级教程
  • YimMenu完全攻略:GTA5模组安全使用与功能解锁终极指南
  • 测试开机启动脚本容灾设计:失败重试与回滚机制实现
  • HY-MT1.5-1.8B实时会议翻译系统
  • Qwen2.5-0.5B法律咨询案例:合同问答系统搭建
  • STM32CubeMX下载安装完整步骤详解(零基础适用)
  • 5个开源大模型镜像推荐:Youtu-2B免配置部署教程
  • NextStep-1:如何用AI轻松实现高保真图像编辑?
  • 对比Photoshop:科哥镜像修图哪个更省时
  • DeepSeek-R1-Distill-Qwen-1.5B优化指南:并发请求处理
  • 大麦自动抢票工具:告别抢票焦虑的终极解决方案
  • Neuro-Sama AI语音助手实战部署:打造智能虚拟主播全流程
  • Balena Etcher新手必看:如何5分钟安全烧录系统镜像
  • Typst简历神器:零基础打造专业求职简历的终极指南
  • 没N卡能用HY-MT1.5吗?AMD电脑用户救星来了
  • Emotion2Vec+在教育场景的应用:学生课堂情绪监测方案
  • YimMenu深度体验指南:解锁GTA5游戏新境界的完整攻略
  • WMIMon:5分钟掌握Windows系统WMI监控的终极利器
  • 终极指南:5806锅盖接收站配置,实现139.3k光子生产奇迹
  • DeepL翻译插件完整指南:3步实现无限免费翻译
  • 如何用SeleniumBasic实现终极浏览器自动化?
  • 新手必看!手把手教你跑通SenseVoiceSmall语音识别
  • HY-MT1.5-1.8B性能深度:A100 GPU上不同batch size测试
  • 儿童教育新玩法:用Qwen_Image_Cute_Animal打造个性化动物认知卡片
  • 文本嵌入就这么简单!Qwen3-Embedding-0.6B体验报告
  • Android轮盘选择器深度应用:从基础集成到性能优化实战
  • IBM 7B轻量AI模型Granite-4.0-H-Tiny:企业效率神器