解决flash不能写入单个字节小记
发布时间:2020-12-15 20:06:28 所属栏目:百科 来源:网络整理
导读:void program_data (u16 flash_addr,u8 buffer [] ,u8 len) { u8 i,flagstatus = 0x00 ; // u16 address; // int8_t trycnt=1; // retry_lbl: // if(trycnt-- = 0) return (0); FLASH-CR1 = (u8)(~ 0x01 ); FLASH-CR1 |= (u8) 0x00 ; // address = flash_add
void program_data(u16 flash_addr,u8 buffer[],u8 len) { u8 i,flagstatus = 0x00; // u16 address; // int8_t trycnt=1; // retry_lbl: // if(trycnt-- <= 0) return (0); FLASH->CR1 &= (u8)(~0x01); FLASH->CR1 |= (u8)0x00; // address = flash_addr; for(i = 0; i < len; i++) { clr_watchdog(NULL); /* Unlock Program memory */ FLASH_Unlock(FLASH_MEMTYPE_PROG); *((u8 *) flash_addr) = buffer[i]; while (flagstatus == 0x00) { flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01))); //timeout--; } FLASH_Lock(FLASH_MEMTYPE_PROG); flash_addr++; } // address = flash_addr; /* for(i = 0; i < len; i++) { if(*((u8*) address) != buffer[i]) goto retry_lbl; address++; } return 1;*/ } void program_data(u16 flash_addr,u8 buffer[],u8 len)此函数是在dev_ctrl.c里,调用函数是在up_date.c里面。在up_date.c里面没有申明此函数,因此会产生单字节,或者多字节写不进去的问题。被化为注释的代码是用来读出判断用的,写入和读出的不一样就会重新写入。另外注意void是没有返回值的,在此函数里return 1 是编译通不过的。想编译通过应该修改为:u8 program_data(u16 flash_addr,u8 buffer[],u8 len) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 【Cocos游戏实战】功夫小子第四课之设置功能和图籍场景的实
- ruby – 在字符串编码中猜测日志文件中的字节流
- xcode – 在Mac OS X Lion上缺少llvm-gcc:无法安装mysql-p
- 深入理解MongoDB分片的管理
- vue-image-crop基于Vue的移动端图片裁剪组件示例
- VB.NET<机房收费系统个人重构版>你都学会了什么(之三)
- ruby-on-rails – 使用无效参数更新时RSpec控制器规范失败
- Nosql Mongodb之旅(24)—MongoDB Replica Sets
- SQLite剖析(4):数据类型
- git commit 时自动对所有 php 文件执行语法错误检查