嵌入式作业6.1 Flash 在线编程
1.嵌入式系统学习札记系列2.嵌入式作业1.1 嵌入式系统常用术语3.嵌入式作业1.2 运行示例程序4.嵌入式作业2.1 汇编练习5.嵌入式笔记2.1 ARM Cortex-M3M4汇编指令集6.嵌入式笔记2.2 ARM-GUN汇编简介7.嵌入式作业3.1 GPIO点亮小灯8.嵌入式笔记1.1 ARM Cortex-M3M4简介9.嵌入式笔记3.1 GPIO(mcu 手册)10.嵌入式笔记4.2 USART11.嵌入式笔记4.3 Cortex-M3与Cortex-M4异常和中断详解12.嵌入式作业4.1 USART 编程13.嵌入式笔记4.1 GPIO 功能复用14.嵌入式笔记5.1 定时器详解15.嵌入式作业5.1 定时器编程
16.嵌入式作业6.1 Flash 在线编程
17.嵌入式笔记6.1 Flash18.嵌入式作业6.2 ADC 编程19.嵌入式作业6.3 CAN 总线编程20.嵌入式 Linux 基础:环境配置(Debian 12 安装配置)目录
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
函数中擦除语句删除后的结果。
结果分析#
在未对指定扇区擦除的情况下直接写入,写入会失败,即操作扇区时,没有擦除不可写入新数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了