硬汉嵌入式论坛

 找回密码
 立即注册
查看: 248|回复: 2
收起左侧

[STM32H7] freertos系统中eeprom读写操作阻塞系统

[复制链接]

57

主题

656

回帖

832

积分

金牌会员

积分
832
发表于 2025-4-11 21:21:13 | 显示全部楼层 |阅读模式
应用中创建一个任务来读写eeprom,i2c采用硬件接口速度最大就400K,如果读写数据量比较大的时候是不是会阻塞系统,一直都搞不明白这个大量读书eeprom速度问题,hal库有三种方式读写,查询方式本来就是阻塞操作的,另一种是中断,还有种是DMA,但看参考例子中断和DMA方式读写也有一个while死等操作,那不就是变成阻塞了,不知道是不是理解有错。

参考例子中断和DMA都有如下这个操作

    while (HAL_I2C_GetState(&I2cHandle) != HAL_I2C_STATE_READY)
    {
    }


现在就想找个解决方案,需要大数据读写大概10K的数据量,这个是需要存储数据的时候才写入的,没有操作的时候任务是挂起的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-4-12 09:17:18 | 显示全部楼层
1、如果用这个的话,里面加个osDelay,释放CPU权限,任务挂起

  while (HAL_I2C_GetState(&I2cHandle) != HAL_I2C_STATE_READY)
    {
         osDelay(1)
    }

2、也可以使用传输完成回调,里面设置个信号量发送,任务等待信号量。
回复

使用道具 举报

57

主题

656

回帖

832

积分

金牌会员

积分
832
 楼主| 发表于 2025-4-12 11:33:55 | 显示全部楼层
哦,尝试调试看看,这个应该也是常用的应用,在上网就没有查到相对合理的参考方案,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 01:37 , Processed in 0.444486 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表