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

杰发科技AC7840——如何把结构体数据写到Dflash中

1. 结构体数据被存放在Pflash中

正常情况下,可以看到全局变量的结构体数据被存放在Pflash中

数字部分存在RAM中

2. 最小编程单位

8字节编程,因此如果结构体存放在Dfalsh中,进行写操作,需要写8字节的倍数

第一种办法:

测试之后,Dflash存储结构体数据,读写没问题。pflash中还有字符串数据,这个应该还要想办法解掉。

// 定义8字节对齐的配置结构体
typedef struct {uint8_t chipModel[12];   // 芯片型号字符串(AC7840X_HC32F460等)uint16_t configVersion;  // 配置版本号uint32_t deviceId;       // 设备IDuint16_t configFlags;    // 配置标志uint8_t opMode;          // 操作模式uint8_t reserved1;       // 保留字节(用于对齐)uint32_t calibration[2]; // 校准数据uint16_t checksum;       // 校验和uint8_t reserved2[14];    // 保留字节(确保总大小为32字节)
} __attribute__((packed, aligned(8))) DeviceData;  // 强制8字节对齐// 将结构体转换为字节流
void DeviceData_to_bytes(const DeviceData* data, uint8_t* buffer) {memcpy(buffer, data, 40);
}// 从字节流恢复结构体
void bytes_to_DeviceData(const uint8_t* buffer, DeviceData* data) {memcpy(data, buffer, 40);
}
__attribute__((section("dflash_data")))
DeviceData new_data;  // 注意:初始值不会自动存入DFlashvoid initDefaultConfig(DeviceData* config) {memset(config, 0, sizeof(DeviceData));strncpy((char*)config->chipModel, "AC78406HGLA", 11);config->configVersion = 0x0100;config->deviceId = 0x6666;config->configFlags = 0x7777;config->opMode = 0x03;config->calibration[0] = 0x88888888;config->calibration[1] = 0x99999999;config->checksum = 0x1234;
}void Job_DflashDataWrite(void)
{initDefaultConfig(&new_data);DeviceData_to_bytes(&new_data,g_wBuff);status_t ret = STATUS_SUCCESS;FLASH_DRV_UnlockCtrl();FLASH_DRV_EraseBlock(&g_Flash_Config, TestDflashWriteAddress);FLASH_DRV_Program(&g_Flash_Config, TestDflashWriteAddress, 40, g_wBuff);FLASH_DRV_LockCtrl();ret = 100;
}DeviceData read_data;
void Job_DflashDataRead(void)
{uint16_t i = 0;uint8_t DflashReadBuf[TestSize] = {0};FLASH_DRV_Read(&g_Flash_Config,TestDflashWriteAddress, DflashReadBuf,40);   /*!< ???????*/bytes_to_DeviceData(DflashReadBuf,&read_data);i = 100;
}Job_DflashDataWrite();
Job_DflashDataRead();  

第二种办法:

注意:

pack没有加DFlash算法,在keil中看不到数据,直接看hex可以看到。

相关文章:

  • 【NLP 76、Faiss 向量数据库】
  • 珈和科技贺李德仁院士荣膺国际数字地球学会会士:以时空智能赋能可持续发展目标 绘就数字地球未来蓝图
  • 【神经网络与深度学习】扩散模型之通俗易懂的解释
  • HarmonyOS5云服务技术分享--ArkTS调用函数
  • 4-5月份,思科,华为,微软,个别考试战报分享
  • 鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
  • 一文掌握vue3基础,适合自学入门案例丰富
  • A1-A2 英语学习系列 第四集 中国版
  • MYSQL备份恢复知识:第四章:备份锁
  • 关于汇编语言与接口技术——单片机串行口的学习心得
  • 【综述】视频目标分割VOS
  • 视频监控联网系统GB28181协议中互联结构详解
  • 零基础入门Selenium自动化测试:自动登录edu邮箱
  • python宠物用品商城系统
  • web开发全过程总结
  • php、laravel框架下如何将一个png图片转化为jpg格式
  • langchain 实现 任务分解器
  • 【基础知识】QSPI的命令
  • Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN
  • Windows 上配置 Docker,Docker 的基本原理和用途,以及如何在 Docker 中运行程序
  • 体坛联播|王楚钦晋级男单16强,德布劳内曼城主场谢幕
  • 花290多万维修保质期仅一年多?媒体四问凤阳鼓楼“瓦片脱落”
  • 张永宁任福建宁德市委书记
  • 专访|金七猫奖得主:以非遗为舟,在现实题材中疗愈与成长
  • 著名文学评论家、原伊犁师范学院院长吴孝成逝世
  • 4月份国民经济顶住压力稳定增长