使用的单片机为GD403系列,要操作的数据flash地址位于bank1,最小操作单位为一页,即4k。下面程序演示操作一页中部分内存空间
#define LSM6DSR_BIAS_MAGIC 0xAAAA5555
uint32_t magic = LSM6DSR_BIAS_MAGIC;
uint32_t *data_flash = (uint32_t *)ezbsp_RTOS_malloc(0x1000);//申请4k字节内存空间
ezbsp_fmc_read(LSM6DSR_BIAS_MAGIC_ADDR, data_flash, 0x400);//将原始数据读出来 保存在data_flash中 因为data_flash是32位的,所以读的个数要除以4
ezbsp_fmc_erase_pages(LSM6DSR_BIAS_MAGIC_ADDR,0x400);//擦除一整页 此函数入参也为32位整形数
memcpy((uint8_t*)((uint32_t)data_flash+(LSM6DSR_BIAS_MAGIC_ADDR-LSM6DSR_BIAS_MAGIC_ADDR)),&magic,4);//将要写入的数据拷贝到data_flash中
memcpy((uint8_t*)((uint32_t)data_flash+(LSM6DSR_BIAS_ACC_ADDR-LSM6DSR_BIAS_MAGIC_ADDR)),&gsensor_offset.acc,4);//同上
memcpy((uint8_t*)((uint32_t)data_flash+(LSM6DSR_BIAS_GYRO_ADDR-LSM6DSR_BIAS_MAGIC_ADDR)),&gsensor_offset.gyro,4*3);//同上
ezbsp_fmc_program(LSM6DSR_BIAS_MAGIC_ADDR, data_flash, 0x400);//将组合好的data_flash写入页内存中
ezbsp_RTOS_free(data_flash);//将malloc的内存释放掉



