完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ucosiii会导致flash数据初始化全部为0xff,flash是W25Q64,对flash的操作函数是原子哥的例程。而且我在进行flash操作的时候是把调度器给关闭掉的,求大神们帮助
void SPI_Flash_Write(CPU_INT08U* pBuffer,CPU_INT32U WriteAddr,CPU_INT16U NumByteToWrite) { CPU_INT32U secpos; CPU_INT16U secoff; CPU_INT16U secremain; CPU_INT16U i; CPU_SR_ALLOC(); OS_CRItiCAL_ENTER(); secpos=WriteAddr/4096;//扇区地址 secoff=WriteAddr%4096;//在扇区内的偏移 secremain=4096-secoff;//扇区剩余空间大小 if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节 while(1) { SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//读出整个扇区的内容 for(i=0;i if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除 } if(i SPI_Flash_Erase_Sector(secpos);//擦除这个扇区 for(i=0;i SPI_FLASH_BUF[i+secoff]=pBuffer; } SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区 }else SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间. if(NumByteToWrite==secremain)break;//写入结束了 else//写入未结束 { secpos++;//扇区地址增1 secoff=0;//偏移位置为0 pBuffer+=secremain; //指针偏移 WriteAddr+=secremain;//写地址偏移 NumByteToWrite-=secremain; //字节数递减 if(NumByteToWrite>4096)secremain=4096; //下一个扇区还是写不完 else secremain=NumByteToWrite; //下一个扇区可以写完了 } } OS_CRITICAL_EXIT_NO_SCHED(); } void SPI_Flash_Read(CPU_INT08U* pBuffer,CPU_INT32U ReadAddr,CPU_INT16U NumByteToRead) { CPU_INT16U i; CPU_SR_ALLOC(); OS_CRITICAL_ENTER(); SPI_FLASH_CS=0; //使能器件 SPI1_ReadWriteByte(W25X_ReadData); //发送读取命令 SPI1_ReadWriteByte((CPU_INT08U)((ReadAddr)>>16)); //发送24bit地址 SPI1_ReadWriteByte((CPU_INT08U)((ReadAddr)>>8)); SPI1_ReadWriteByte((CPU_INT08U)ReadAddr); for(i=0;i pBuffer=SPI1_ReadWriteByte(0XFF); //循环读数 } SPI_FLASH_CS=1; //取消片选 OS_CRITICAL_EXIT_NO_SCHED(); } |
|
相关推荐
3个回答
|
|
不用OS,数据都是正常的。后来我在进行flash操作的时候把调度器和中断全部关闭了,目前没有出现这个问题了
|
|
|
|
综合实验 用的ucosii,没有这个问题。按理说III应该也可以才对。不用OS就正常了?
|
|
|
|
我也遇到这个问题了,Mark一下
|
|
|
|
只有小组成员才能发言,加入小组>>
882 浏览 0 评论
1196 浏览 1 评论
2574 浏览 5 评论
2910 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2770 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1237浏览 3评论
222浏览 2评论
496浏览 2评论
403浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
484浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 22:51 , Processed in 1.049512 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号