嵌入式作业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函数中擦除语句删除后的结果。

结果分析#

在未对指定扇区擦除的情况下直接写入,写入会失败,即操作扇区时,没有擦除不可写入新数据。

作者:YZXE

出处:https://www.cnblogs.com/YZXE/p/18244261

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   一只心耳  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示