Loading

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

结果分析

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

posted @ 2024-06-12 16:52  一只心耳  阅读(30)  评论(0编辑  收藏  举报