在STM32 MDK实现类似__attribute__((__packed__))效果

2023-05-16


__attribute__是GNU  C对标准C语法的扩展,是GNU C的一大特色,可以用于设置函数的属性,变量的属性,类型的属性



在STM32 MDK实现类似效果;
实验数据如下:
代码

void printRecData(void)
{
    typedef struct{
        uint16_t      tpdb_01;                                                     // 存储器中有效的录音文件数量   
        uint8_t       tpdb_02;                                                       // 当前模块音量
        uint16_t      tpdb_03;                                                     // 已录时间
        uint16_t      tpdb_04;                                                    // 已录空间
        uint16_t      tpdb_05;                                                 // 当前播放的编号
        uint32_t      tpdb_06;
        uint8_t       tpdb_07;
    }typedef_TPrecData;
typedef_TPrecData TPrecData
= { .tpdb_01 = 0x0123, // 存储器中有效的录音文件数量 .tpdb_02 = 0x45, // 当前模块音量 .tpdb_03 = 0x67, .tpdb_04 = 0xabcd, // 已录空间 .tpdb_05 = 0xef10, // 当前播放的编号 .tpdb_06 = 0xaabbccdd, .tpdb_07 = 0x76, }; uint8_t i = 0; uint8_t * ptr= (uint8_t *) &TPrecData; for(i = 0;i<sizeof(TPrecData);i++){ printf("%02x ", ptr[i]); } printf("\n"); }

输出结果为:23 01 45 00 67 00 cd ab 10 ef 00 00 dd cc bb aa 76 00 00 00 

 

修改代码如下:


void printRecData(void)
{
    typedef __packed struct {
        uint16_t      tpdb_01;                                                     // 存储器中有效的录音文件数量   
        uint8_t       tpdb_02;                                                       // 当前模块音量
        uint16_t      tpdb_03;                                                     // 已录时间
        uint16_t      tpdb_04;                                                    // 已录空间
        uint16_t      tpdb_05;                                                 // 当前播放的编号
        uint32_t      tpdb_06;
        uint8_t       tpdb_07;
    }typedef_TPrecData;
typedef_TPrecData TPrecData
= { .tpdb_01 = 0x0123, // 存储器中有效的录音文件数量 .tpdb_02 = 0x45, // 当前模块音量 .tpdb_03 = 0x67, .tpdb_04 = 0xabcd, // 已录空间 .tpdb_05 = 0xef10, // 当前播放的编号 .tpdb_06 = 0xaabbccdd, .tpdb_07 = 0x76, }; uint8_t i = 0; uint8_t * ptr= (uint8_t *) &TPrecData; for(i = 0;i<sizeof(TPrecData);i++){ printf("%02x ", ptr[i]); } printf("\n"); }

输出结果为:23 01 45 67 00 cd ab 10 ef dd cc bb aa 76 

 

转载于:https://www.cnblogs.com/jlicon/p/6627146.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在STM32 MDK实现类似__attribute__((__packed__))效果 的相关文章

随机推荐

  • Fiji-imageJ 无法打开

    可能的原因是文件的路径包含中文名称 转载于 https www cnblogs com cmyg p 11408207 html
  • The type name or alias SqlServer could not be resolved.Please check your configuration

    The type name or alias SqlServer could not be resolved Please check your configuration file 检查一下Config文件中包含的dll再dubug文件夹
  • 总结记录一下如何统计CPU使用情况、磁盘利用率

    一 cpu使用率 可以使用 proc stat命中查看 举例 xff1a cat proc stat grep cpu cpu 1391321772 178 2524194226 33711208592 1046582 6540 38867
  • LCD1602屏幕简介(全网最详细教程)

    目录 1 接线说明 2 LCD1602显示原理 3 LCD1602时序分析 4 LCD1602显示一个字符 5 LCD1602显示一行 1 接线说明 第1引脚 xff1a GND为电源地 第2引脚 xff1a VCC接5V电源正极 第3引脚
  • .Net Core 获取上下文HttpContext

    1 先定义一个类 using Microsoft AspNetCore Http namespace BCode Util public class MvcContext public static IHttpContextAccessor
  • XML有关知识

    可扩展标记语言 起初w3c为了严格语法 xff08 html在各个浏览器的恶性竞争下语法已经变得很松散了 xff09 推出了xml 功能 xff1a 存储数据 xff0c 1 配置文件使用 2 在网络中传输 转载于 https www cn
  • pixhawk代码移植到不同stm32芯片

    本文基于pixhawk1 0 1代码 xff0c 移植需要的知识很多 xff0c 一两个文章可说不清楚 xff0c 里面涉及到编译原理 xff0c 操作系统 xff0c stm32 xff0c 计算机组成原理等 xff0c 需要长期积累 x
  • 转 Pycharm及python安装详细教程

    转 xff1a http blog csdn net qq 29883591 article details 52664478 首先我们来安装Python 1 首先进入网站下载 xff1a 点击打开链接 xff08 或自己输入网址https
  • Python基础(6)——实现输入任意多个数,并计算其平均值

    学习了Python相关数据类型 xff0c 函数的知识后 xff0c 利用字符串的分割实现了输入任意多个数据 xff0c 并计算其平均值的小程序 思路是接收输入的字符串 xff0c 以空格为分隔符 xff0c 将分割的数据存入列表 xff0
  • 校园网破解

    今天刷酷安看到了校园网破解 xff0c 正好有时间研究下 首先了解一下校园网的机制 平时在家用的wifi均为外部网进来接路由器LAN端口 xff0c 在路由器里填入你的宽带账号密码 xff0c 开启DHCP即可 这里的校园进来插到了LAN口
  • 绝命毒师第一季/全集Breaking Bad迅雷下载

    本季Breaking Bad Season 1 2008 看点 xff1a 新墨西哥州的高中化学老师沃尔特 H 怀特 xff08 布莱恩 科兰斯顿 Bryan Cranston 饰 xff09 是拮据家庭的唯一经济来源 他大半生安分守己 x
  • Linux 释放socket资源,LwIP使用select,close socket资源释放不完全问题

    这篇文章本应该在4月就写好的 xff0c 但是博客评论系统一直没有搭建好 xff0c 走了很多弯路 xff0c 现在好了 xff0c delay这么久 xff0c 终于要要补过来了 自建博客 xff1a 金宝的博客 该文章完全原创 xff0
  • __FILE__,__LINE__,__DATE__,__TIME__ c++常用的预定义名字

    C 43 43 有四个常用的预定义名字 xff0c 分别为 FILE LINE DATE TIME FILE 记录文件的路径加名称 LINE 记录文件已经被编译的行数 DATE 记录文件的编译日期 TIME 记录文件的编译时间 可以当作变量
  • 串口拓展

    今天桌子下面找出一个破电路板看到一颗芯片GM8125 xff0c 这个芯片主要功能就是拓展串口 GM8125可以将一个全双工的标准串口扩展成5个标准串口 xff0c 并能通过外部引脚控制串口扩展模式 xff1a 单通道工作模式和多通道工作模
  • HttpUtils

    package com rs zero crc common http import com rs zero crc modulars common constants SysConstantConf import com xiaoleil
  • 【转】C语言中的位域、字节序、比特序、大小端

    1 比特序 位序 bit numbering bit endianness 我们知道一个字节有8位 xff0c 也就是8个比特位 从第0位到第7位共8位 比特序就是用来描述比特位在字节中的存放顺序的 通过阅读网页http en wikipe
  • 位定义方法定义寄存器

    寄存器 位域 定义的语法格式 xff1a Struct 位域结构名 类型说明符 位域名1 xff1a 位域长度 类型说明符 位域名2 xff1a 位域长度 类型说明符 位域名n xff1a 位于长度 从右到左申明的 位域的申明不能横跨两个字
  • Qt 模拟一个导航定位系统

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https www cnblogs com lihuidashen p 115
  • RESTful Api 身份认证中的安全性设计探讨

    REST 是一种软件架构风格 RESTful Api 是基于 HTTP 协议的 Api xff0c 是无状态传输 它的核心是将所有的 Api 都理解为一个网络资源 将所有的客户端和服务器的状态转移 xff08 动作 xff09 封装到 HT
  • 在STM32 MDK实现类似__attribute__((__packed__))效果

    attribute 是GNU C对标准C语法的扩展 xff0c 是GNU C的一大特色 xff0c 可以用于设置函数的属性 xff0c 变量的属性 xff0c 类型的属性 在STM32 MDK实现类似效果 xff1b 实验数据如下 xff1