关于flash擦除引起的bug问题小结
来源:互联网 发布:c语言调试工具 编辑:程序博客网 时间:2024/05/17 21:43
u16 irlib_get_free_block(const u8 * libno){ u8 i; vu16 low, up; u16 _libno = le16_to_cpu(*(u16*)libno); u16 test = 0; if (_libno == 0) { irlib.libno0_use_sec = 1-irlib.libno0_use_sec; } get_limitidx_by_libno(libno, &low, &up); spi_flash_erase(IrLibInfoAddr(low), IrLibInfoAddr(up - low)); spi_flash_erase(IrLibDataAddr(low), IrLibDataAddr(up - low)); if (_libno == 0) { irlib.libno0_use_sec = 1-irlib.libno0_use_sec; } else { irlib.libno[i] = _libno; irlib.lib_cycle[i]++; eeprom_write(OF_IRLIB_PARAM+offsetof(struct IrLib_EEProm, libno)+i*sizeof(irlib.libno[i]), &irlib.libno[i], sizeof(irlib.libno[i])); eeprom_write(OF_IRLIB_PARAM+offsetof(struct IrLib_EEProm, lib_cycle)+i*sizeof(irlib.lib_cycle[i]), &irlib.lib_cycle[i], sizeof(irlib.lib_cycle[i])); } return low;}
spi_flash_erase(IrLibDataAddr(low), IrLibDataAddr(up - low));此函数经过传递会在传递函数里,出现参数的传递错误。原因是up和low参数被优化了。typedef volatile unsigned short vu16;解决的办法是定义为vu16void spi_flash_erase(u32 addr, u32 len){ u32 eraselen; len += addr & (u32) (SPI_FLASH_SectorSize - 1);#if 0 len += SPI_FLASH_SectorSize - (len & (u32) (SPI_FLASH_SectorSize - 1)); addr &= (u32) (~(SPI_FLASH_SectorSize - 1)); if (addr == FLASH_START_ADDR && len >= FLASH_SIZE) { spi_flash_chip_erase(); return; }#endif while (len > 0) { eraselen = len; if(eraselen > SPI_FLASH_SectorSize) eraselen = SPI_FLASH_SectorSize; spi_flash_sector_erase(addr); addr += SPI_FLASH_SectorSize; len -= eraselen; }}上面两个函数都完美解决了,传进来的长度不是4K整数的问题。void spi_flash_erase(u32 addr, s32 len){ len += addr & (u32) (SPI_FLASH_SectorSize - 1);#if 0 len += SPI_FLASH_SectorSize - (len & (u32) (SPI_FLASH_SectorSize - 1)); addr &= (u32) (~(SPI_FLASH_SectorSize - 1)); if (addr == FLASH_START_ADDR && len >= FLASH_SIZE) { spi_flash_chip_erase(); return; }#endif while (len >= 0) { spi_flash_sector_erase(addr); addr += SPI_FLASH_SectorSize; len -= SPI_FLASH_SectorSize; }}
0 0
- 关于flash擦除引起的bug问题小结
- bootloader中关于flash擦除写和ram初始化的有关问题
- 小问题引起的bug
- flash的读写擦除
- java中关于泛型擦除的小结
- haslayout 问题引起的常见 bug
- std::nth_element bug引起的crash问题
- JAVA泛型-类型擦除太恶心,但项目中大量使用,以及类型擦除引起的问题及解决方法
- flash的读写和擦除
- 关于Msp430 Flash型单片机内部Flash的操作——即片内Flash的擦除、写入、读取
- 泛型(二)->擦除&擦除带来的问题
- Java擦除的问题
- 关于java泛型擦除与ClassCastException的问题
- 关于c语言的算术转换引起的bug
- 由一个bug引起的关于list的思考
- unsigned引起的bug
- typedef引起的bug
- 【一起玩esp8266】flash的擦除方法
- IP地址分类及IP地址的子网的划分
- Mysql日常使用维护命令总结
- ZOJ 3469Food Delivery(区间DP)
- getParameter() getAttribute()
- linux下git客户端命令总结
- 关于flash擦除引起的bug问题小结
- 骨牌铺方格
- 直流电子负载怎么调试开关电源
- 代码大全_第一部分: 打好基础
- 2016年,C语言该怎样写
- TCP协议的三次握手
- android 滑动删除的listview(自定义view)
- SharedPreferences和序列化结合保存对象数据
- Numpy的repeat函数和tile函数