首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[ Zephyr -rtos][rtos]Zephyr诉RIOT OS

[ Zephyr -rtos][rtos]Zephyr诉RIOT OS
EN

Stack Overflow用户
提问于 2021-03-04 11:14:59
回答 1查看 705关注 0票数 0
代码语言:javascript
复制
  Hello everyone, 

我是图卢兹大学的软件定义电力电子研究人员Luiz Villa。我的团队正在努力将实时操作系统嵌入到微控制器上,以便在电力电子领域创建一个更加友好的嵌入式控制开发过程。我们正尽量避免使用ISRs,原因有二:

它使软件开发中的协作变得更容易(我们的项目是open-source)

  • Interrupts,使代码执行时间不确定(我们希望避免)

)。

我们想在Zephyr和RIOT之间建立一个线程速度的基准。我们需要一个以20 that的速度运行的代码,其中有2到3个线程执行:

控制averaging

  • Mathematical的
  • ADC采集和数据计算(使用CMSIS)
  • Communication和外部

)

由于时间对我们来说是如此重要的因素,我们需要知道:

  • 在Zephyr和RIOT OS中执行线程的最短时间是多少?
  • ?在Zephyr中的线程之间切换所需的时间?

我们的初步结果表明:

  • 在单线程测试时,睡眠时间为0us时,Zephyr的测试周期为9 0us,而使用单线程测试的时间为5 0us
  • ,睡眠时间为10 0us,Zephyr的测试周期为39 0us和

我们使用Nucleo-G474RE,代码如下:https://gitlab.laas.fr/owntech/zephyr/-/tree/test_adc_g4

我们对我们的结果感到非常惊讶,因为我们预计这两个操作系统所消耗的资源都会比它们少得多。

你认为如何?你试过尽可能快地运行这些操作系统吗?你的结果是什么?你测试过Zephyr的换线时间吗?

代码语言:javascript
复制
  Thanks for reading
        Luiz 
EN

回答 1

Stack Overflow用户

发布于 2021-04-08 08:25:42

免责声明:我是一个防暴核心开发人员。

:在Zephyr和RIOT中切换线程所需的时间?当用单线程测试时,睡眠时间为0us时,Zephyr的测试周期为9 5us和riot 5us。

这似乎是对的。

如果我在核-f401re(84 M4 STM32F4 / Cortex-M4)上运行一个自己的调度微基准(例如,tests/bench_mutex_pingpong),结果是:

代码语言:javascript
复制
main(): This is RIOT! (Version: 2021.04-devel-1250-gc8cb79c)
main starting
{ "result" : 157303, "ticks" : 534 }

测试测量一个线程切换到另一个线程和返回线程的次数。一次迭代(两个上下文开关)需要534个时钟周期,即1000000/154303 = ~6.36us,接近于您得到的数字。

这是上下文切换开销。线程的寄存器和状态存储在它的堆栈中,调度程序运行以确定下一个可运行的线程,并恢复该线程的寄存器和状态。

我很惊讶泽弗尔没能接近暴乱。可能检查它是在优化启用的情况下编译的,还是一些启用的特性增加了切换开销(例如,MPU是否已启用?)

在Zephyr和RIOT中执行线程的最短时间是多少?

在ISR服务和上下文切换之后剩下的东西。

,你觉得呢?

有三个线程排定在20千赫,并让他们做实际的工作将是紧密的一个Cortex-M在泽菲尔或暴乱,所以我认为你应该重新构建你的应用程序。有多个线程在逻辑上分离它们是非常好的,但是在这里,一个经典的主循环可能是一个更好的选择。

类似的东西(伪代码):

代码语言:javascript
复制
void loop() {
  while(1) {
    handle_adc();
    do_dsp_computation();
    send_data();
    periodic_sleep_us(50);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66473898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档