- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
前情提要:需要刷写一整个app程序,分包刷写,每包字节数为单数,要求CRC校验正确。(芯片底层提供32位全字刷写和16位半字刷写,驱动只整合了32位全字刷写函数) 。
使用32位刷写函数出现的现象:通过keil5观察内存空间发现一包刷写成功一包刷写失败一包刷写成功...一直循环到末尾,刷写失败的包开始几个字节为乱码,不是包中的内容,且后面为全0xFF.
首先理解驱动中32位写入内存函数刷写单数字节是如何处理的,在每次刷写完一次4字节之后,判断该包剩余未刷写字节数是否小于4,若小于4则补充0xFF至4个字节后一次刷入4字节结束.
出现问题,由于一个完整的app程序要求每个包中间是完美连接的,即一个分包的末尾字节的下一个字节为下一包的首字节。此时一个包的末尾字节后有刚刚补充的0xFF,内存通常在一次刷写之后会自动加上写保护,再次擦除之后才可再次刷写.
一包刷写成功之后,下一包的首字节刷写地址和上一包末尾补充0xFF冲突,造成刷写失败写入随机非0乱码.
更改驱动中32位全字刷写函数,更改逻辑为:当前包刷写剩余字节数小于4时,将剩余字节按顺序放入一个4字节缓存中,并记录下剩余字节个数。当下一包开始刷写时,刷写地址需减去上一包剩余字节个数,并从首字节开始补充上述4字节缓存,形成一个由上一包的尾字节与当前包首字节组成的4字节全字刷写。最后需要额外判断整个app是否即将刷写完成,若当前包为最后一包,那么就没有下一包来补充含有剩余字节的4字节缓存,此时按原有逻辑补充0xFF进行32位全字刷写.
由于该全字刷写函数不一定只有app刷写功能调用,还有例如参数保存等功能调用,所以建议使用宏定义,若不是app刷写功能则32位全字刷写函数内容与原来保持一致。作者并因为是新手,对宏定义理解不深刻,并没有第一时间想到这种操作方式,使用if-else也实现了,但是想起来好像宏定义更好看一点,哈哈。有想法、问题、意见可以评论或私信提出,欢迎交流转载.
以上就是今天要讲的内容,感谢您的关注.
最后此篇关于驱动仅提供32位刷写的情况下如何完成刷写单数字节的文章就讲到这里了,如果你想了解更多关于驱动仅提供32位刷写的情况下如何完成刷写单数字节的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一堆来自中国的通用信标,我想将其升级到 Eddystone。我该如何去做呢? 最佳答案 一些信标硬件供应商(例如 Estimote 和 Kontakt.io)现在也支持 Eddystone™。您可
我正在研究 BeagleBone Black 和在其上运行的 Debian。我想在我的板上刷入最新的 Debian 镜像。为此,我从链接下载了最新的 Debian 镜像:BeagleBone Imag
我是一名优秀的程序员,十分优秀!