int length = 0;
while (1)
{
length++;
if (length == 50000000) break;
}
同样执行这么一个循环,在UCOS或裸机里只需要
695毫秒,但在rt thread里需要2800毫秒,谁知道是哪的原因呢
注:rt thread里这段代码放在main函数里,没有创建其他线程
关闭全局中断试试? 循环结束时再打开中断。
看看差异
系统时钟倍频成功了?
关掉 RT_DEBUG 有变化没?
你可以对比这段代码的汇编,应该没什么区别,原因可能是RTT在main函数之前的entry函数里创建过几个任务了吧
这种不会有差别的,而且还差别那么大,肯定是楼主哪里配置的不对。另外rt-thread的main跟其他的main不一样,如果你开了自动初始化的话,rt-thread的main是一个任务来的。首先你先确认下时钟是否一致,其次,你关闭中断测量看下。
rtthread 默认的main是在一个task内部,rt_application_init 里面的初始化,另外有时间片的管理,task的时间片耗尽会强制切换到别的task, 看下main所在线程(main_thread_entry)创建的时间片设置(rt_thread_create的tick参数),改成全F试一试,另外设置优先级最高。
好吧,你的环境都没有一样,还对比啥呢?keil的default是O2优化,这个要搞清楚。而且armcc和gcc的编译器编译出来的目标文件执行效率也是不一样的。搞半天你是都不是用同一个环境的啊。
关中断获取系统滴答函数就用不了了,怎么看差异呢
系统就在main线程和idle线程里切换呢

@HBQ 开个硬件定时器分频 然后计算获取你的运行时间。