pplive 发表于 2020-12-15 16:55:29

请教下移植Freertos后出现运算速度下降的现象,大家有遇到过吗

请教一下STM32F103RCT6移植Freertos系统。
1、原先裸机前后台系统。采样ADC+DMA 10Kbps采样。采集256数据后DMA中断置位(也就是25.6ms)。这256个数据经过计算(包含一些fft等算法)(运算时间大约32ms)获得结果。这样虽然超标了,满负荷运转,但是超的少,能接收。
2、移植了freertos。发现采样的256个数据运算(还是原先的函数,只是放在任务中运行)。运算时间竟然是54ms。这个运算任务已经设置为任务中的最高优先级。其他任务都是偶发性的极短时间的任务,而且因为优先级的原因,其他任务都不执行。

请问各位大神我需要往那个方向去查?

PPS 发表于 2020-12-15 17:25:20

你现在数据采集没问题,而是采集到的数据计算完后超时,根本原因是CPU算力不够,所以你加个OS干嘛?加OS的作用就是及时给它分配时间让它得到处理,但你现在问题就是即便有时间了,计算也超时。你要的是换个速度更快的CPU。

yzhu 发表于 2020-12-15 17:39:12

加大FreeRTOS的任务切换间隔,让数据处理任务能在一个RTOS周期内完成。或是在数据处理前关闭FreeRTOS的任务切换,完成后再打开。

zzh90513 发表于 2020-12-15 18:34:15

应该是1ms的滴答定时器中断导致的,计算之前关闭中断或者加长滴答时钟

pplive 发表于 2020-12-15 18:57:44

PPS 发表于 2020-12-15 17:25
你现在数据采集没问题,而是采集到的数据计算完后超时,根本原因是CPU算力不够,所以你加个OS干嘛?加OS的 ...

你说的我知道,我就是想知道原因。

pplive 发表于 2020-12-15 18:58:57

yzhu 发表于 2020-12-15 17:39
加大FreeRTOS的任务切换间隔,让数据处理任务能在一个RTOS周期内完成。或是在数据处理前关闭FreeRTOS的任务 ...

实际在任务执行期间没有其他任务执行,要说有也就是系统滴答时钟了。

pplive 发表于 2020-12-15 19:00:17

zzh90513 发表于 2020-12-15 18:34
应该是1ms的滴答定时器中断导致的,计算之前关闭中断或者加长滴答时钟

1ms中断应该不至于吧,我观测的1ms滴答耗时也就8us。影响不至于这么大。而且原先裸机系统中我也有1ms定时器中断。用作系统时间。

lingdianhao 发表于 2020-12-15 19:41:42

系统中的1ms定时器8us跑不完吧,还要查链表哪些操作。

lingdianhao 发表于 2020-12-15 19:42:42

用系统只会变的更慢,用系统的目的是为了方便程序扩展和写复杂的功能。

硬邦邦 发表于 2020-12-15 19:58:44

让CPU运行最快就是裸机,加上系统是方便管理最机的资源

Romate 发表于 2020-12-15 20:11:32

进栈出栈要时间的

wye11083 发表于 2020-12-15 21:01:38

lingdianhao 发表于 2020-12-15 19:42
用系统只会变的更慢,用系统的目的是为了方便程序扩展和写复杂的功能。

还有功能复杂但实时性要求不高的地方。实时性强就只能果机跑,再高就只能fpga了(如高吞吐低延迟高带宽)。

tangmin 发表于 2021-1-1 09:52:50

应用场景不同,OS适合多功能,裸机要求实时性很高的

fengyunyu 发表于 2021-1-1 11:12:14

不应该,看下有没有开启优先级调度

小溪 发表于 2021-1-1 11:21:00

没试过,不过看别人确实遇到过

zack.bot 发表于 2021-1-2 01:42:29

dma中断中,用任务通知比信号量快。 顺便问个问题等高人回答,如果一个任务是运行态,再次被中断通知量唤醒,是重新运行还是继续运行?

dellric 发表于 2021-1-2 11:58:24

看看优化级别是不是还是在O0,有时候简单事情容易搞忘

flash3g 发表于 2021-1-2 15:01:44

zack.bot 发表于 2021-1-2 01:42
dma中断中,用任务通知比信号量快。 顺便问个问题等高人回答,如果一个任务是运行态,再次被中断通知量唤醒 ...

继续运行   

ttoto 发表于 2021-1-2 15:23:00

是时候换一个更好的CPU了
页: [1]
查看完整版本: 请教下移植Freertos后出现运算速度下降的现象,大家有遇到过吗