我尝试在i.MX8上使用SOM,但是有问题: M4核心周期更改性能。
在我们的任务中,我们编程M4来生成信号图(通过GPIO,内部计时器处理程序)。打开电源,一切都好。但是在Linux加载到命令提示符之后,我看到来自M4的图表现在更长了,好像M4慢慢地。增加到4倍(见图)


另外,为了检查性能,我尝试了NXP示例(driver_examples\gpt),并将简单的代码添加到计时器处理程序中:
int summ = 0 , t1 , t2 ;
/ ********** Code ***** /
void EXAMPLE_GPT_IRQHandler ( void ) {
/ * Clear interrupt flag . * /
GPT_ClearStatusFlags ( EXAMPLE_GPT , KGPT_Output Compare1Flag ) ;
t1 = GPT_GetCurrentTimerCount ( EXAMPLE_GPT ) ;
for ( int i = 0 ; i < 1; i ++ ) { summ + = i ; } // dummy loop
t2 = GPT GetCurrentTimerCount ( EXAMPLE_GPT ) ;
PRINTF ( " time = % d \ n \ r " , t2 - t1 ) ;
/ **************** /运行后,我们看到虚拟循环也是不稳定的,就像两种不同的“稳定”状态,大约10或大约40 (在10的电源上;在加载Linux之后-大约40,但有时会再次显示10)。
帮我解决这个问题。(对不起我的英语)
发布于 2022-11-06 11:25:44
我从以下方面理解了您的问题:您正在运行一个程序,其中包含在芯片上的M4系统的I.MX8内核上剪切的给定代码。该程序通过使用通用定时器来产生PWM信号。(芯片上的系统还包含一个能够运行linux的更大的ARM内核。)
当程序在M4内核内运行时,就达到了所需的波形定时。一旦您在另一个内核上启动linux,PWM的波形似乎就会周期性地发生变化。它从原来的波形变化到相同的波形,但频率下降系数4。
linux似乎执行CPU频率缩放和/或使用动态总线频率。这可以改变M4时钟的时钟域的频率,或者至少改变用于创建PWM的通用定时器的时钟域的频率。我认为,后者是有关问题的根源。
见I.MX参考手册第2.3.3和2.3.4节。本手册还列出了以下命令,以便从用户空间禁用动态总线频率。(确保您是根用户):
echo 0 > /sys/devices/platform/busfreq/enable这将停止你的波形的周期性变化。
https://stackoverflow.com/questions/74286625
复制相似问题