完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
实现flashdb的falsh底层操作代码时 由于大量的数据保存可能会导致系统阻塞 我是否可以在
static int write(long offset, const uint8_t *buf, size_t size) { size_t i; uint32_t addr = STM32_onchip_flash.addr + offset; __ALIGN_BEGIN uint32_t write_data __ALIGN_END; __ALIGN_BEGIN uint32_t read_data __ALIGN_END; if(addr%4 != 0) ef_err_port_cnt++; if((int)buf%4 != 0) { ef_err_port_cnt++; printf("write err cnt %d", ef_err_port_cnt); } HAL_FLASH_Unlock(); for (i = 0; i < size; i += 4, buf+=4, addr += 4) { memcpy(&write_data, buf, 4); //用以保证HAL_FLASH_Program的第三个参数是内存首地址对齐 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, write_data); read_data = *(uint32_t *)addr; /* You can add your code under here. */ if (read_data != write_data) { HAL_FLASH_Lock(); return -1; } else{ //FLash操作可能非常耗时,如果有看门狗需要喂狗,以下代码由用户实现 feed_dog(); } } HAL_FLASH_Lock(); on_ic_write_cnt++; return size; } 这个函数内将数据使用消息队列的形式抛给flash实际操作任务 这个任务设置优先级最低 这样是否会造成flashdb内核的数据不一致情况产生导致崩溃呢? |
|
相关推荐
1个回答
|
|
|
在嵌入式系统中,Flash操作通常需要较长时间,可能导致系统阻塞。FlashDB的底层Flash操作接口本身是同步的(代码中的 推荐实现方案(基于任务队列异步处理)关键改进说明:
替代方案:分片写入如果不希望使用额外内存,可实现分片非阻塞写入: 注意事项:
|
|
|
|
|
只有小组成员才能发言,加入小组>>
184个成员聚集在这个小组
加入小组rtstudio是否可像keil加载ini解决虚拟串口与mcu串口通讯?
1212 浏览 0 评论
【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
1776 浏览 1 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
2156 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
1777 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
2006 浏览 0 评论
1465浏览 5评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
1767浏览 3评论
为什么rt_device_read()只能读取到两个字节数据?
364浏览 3评论
连得上热点,但是ping baidu.com出现timeout,请问跟什么有关?
422浏览 3评论
421浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:30 , Processed in 1.769707 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1883
