嵌入式作业6.1 Flash 在线编程
目录
1、理解 flash.c 各函数,编写程序向 flash 中写入并读出数据。(注:扇区号为学号后2位,数据文本中要有姓名。)
程序代码
//主函数
int main(void)
{
uint8_t mK1[32]; //按照逻辑读方式从指定flash区域中读取的数据
uint8_t result; //判断扇区是否为空标识
uint16_t sector = 66U;
//初始化扇区内容
flash_erase(sector);
flash_write(sector,0,32,(uint8_t *) "abcdefghijklmnopqrstuvwxyz1234567890");
printf("初始化%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("擦除前%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);
//擦除指定扇区
flash_erase(sector);
printf("\n擦除%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("擦除后%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);
//向指定扇区第0偏移地址开始写32个字节数据
flash_write(sector,0,32,(uint8_t *) "广州大学 32106100066");
printf("\n写入%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("写入后%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);
for(;;) //for(;;)(开头)
{
}
}
运行效果
2、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?(注:扇区号为学号后2位,数据文本中要有姓名。)
程序代码
//主函数
int main(void)
{
uint8_t mK1[32]; //按照逻辑读方式从指定flash区域中读取的数据
uint8_t result; //判断扇区是否为空标识
uint16_t sector = 66U;
//初始化扇区内容
flash_erase(sector);
flash_write(sector,0,32,(uint8_t *) "123");
printf("初始化%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("擦除前%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);
//擦除指定扇区
/*flash_erase(sector);
printf("\n擦除%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("擦除后%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);*/
//向指定扇区第0偏移地址开始写32个字节数据
flash_write(sector,0,32,(uint8_t *) "广州大学 32106100066");
printf("\n写入%d扇区。\n",sector);
flash_read_logic(mK1,sector,0,32); //从指定扇区读取32个字节到mK1中
printf("写入后%d扇区32字节的内容:%s\n",sector,mK1);
result = flash_isempty(sector,MCU_SECTORSIZE); // 判断指定扇区是否为空
printf("扇区判空,1空,0不空:%d\n",result);
for(;;) //for(;;)(开头)
{
}
}
运行效果
以上为已将
flash_write
函数中擦除语句删除后的结果。
结果分析
在未对指定扇区擦除的情况下直接写入,写入会失败,即操作扇区时,没有擦除不可写入新数据。