UCOSII系统往文件中写数据时需要禁止任务调度吗?
STM32使用UCOS II系统,串口不定时会收到采样端发送过来的数据,主任务收到后会把串口收到的数据通过FAT文件系统写到NANDFLASH内的CSV文件中,昨天突然看到CSV文件中一个数据28.39被意外改成了28.#9,如附件图,怀疑是主任务正在往文件里面写数据,突然串口中断来了,然后又引起系统调度,进入优先级更高的串口数据处理任务(这个任务有调试信息输出,时间相对长一些),导致主任务写数据的时序被打乱,最终写到文件中的数据错了,请问大家在往文件中写数据时有禁止任务调度吗?
如果禁止了任务调度,串口中断只是在数据来临时进入一会就又出来,时间很短,应该影响不大。
不怕一万就怕万一{:titter:} 原则上并不会。。通常大家会加锁解决设备单一访问问题。 任务调度或者中断是否破坏写flash的时序,如果没有,问题不大。 wye11083 发表于 2022-9-5 15:15
原则上并不会。。通常大家会加锁解决设备单一访问问题。
(引用自3楼)
大神您好您是说原则上我那个文件数据被错写原因不会是串口中断引起其它高级别任务调度导致吗?
另外是不是UCOS II系统在写文件时是不是已经默认加锁了啊? ChenXC1121 发表于 2022-9-5 15:34
大神您好您是说原则上我那个文件数据被错写原因不会是串口中断引起其它高级别任务调度导致吗?
另 ...
(引用自5楼)
ucos我没有折腾过。。但根据经验,嵌入式操作系统可能不会去主动加锁。。你可以想办法测测在什么条件下最容易出错,然后定位到具体地方。 涉及到硬件的 都加个锁安全些。
也不占多少资源。 读写flash设备只需加互斥信号量即可,颗粒度做细点 flash读写操作时肯定要避免被中断。
页:
[1]