背景:
- 数据采集时的数据位uint16_t类型的数据,需要将其写入8位flash,以及从8位flash中还原。
一个16位数据,如 uint16_t temp = 0x1234,在8位flash中会在相邻的两个地址中按顺序保存,被拆分为0x12和0x34(注意大小端),如何将这个16位数据直接写入8位flash?有两种方法,一种是把数据声明为联合体,另一种是指针操作。
关于联合体声明的方法,可参考:https://baijiahao.baidu.com/s?id=1623457037181175751&wfr=spider&for=pc
指针操作(写):
- 定义一个uint8_t类型的指针 uint8_t *pwData,指向被强制转换为uint8_t类型的uint16_t类型的数组uint16_t data[LEN]的首地址,然后将*pwData写入flash,写入完毕后,pwData指针地址+1,总写入次为数组长度的2倍
- 即uint8_t *pwData = (uint8_t *)data;pwData++;
指针操作(读):
- 定义一个uint16_t类型的指针 uint16_t *prData,指向被强制转换为uint16_t类型的uint8_t类型的flash数组数据,uint8_t dataflash[LEN]的首地址,然后将*prData按要求处理,处理完毕后,pwData指针地址+1,总读取次数为数组长度的1/2
- 即uint16_t *prData = (uint16_t *)dataflash;prData++;