问题标签 [rtos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2124 浏览

c++ - 从 const void * 转换为浮点数组

我正在为 mbed 平台使用 rtos 库。我希望能够跳入线程,以恒定速率递增某个值,然后在结束时关闭线程。问题是从 mbed RTOS 库中实现 Thread 的方法只能接受一个const void *参数。这没什么大不了的,除非我需要向它发送一个浮点值数组,其中一个值是指向我需要递增的值的指针(*joint),而其他值可以简单地const控制范围和速度增量。我以为我已经控制住了,并在这里找到了一些可以正确转换的简洁代码,但我仍然不断提出 0 值://float (*vals)[4] = (float (*)[4])args;

下面是代码,只剩下参与线程工作的两个函数。

提前感谢您为我指明正确方向的任何事情!

0 投票
5 回答
13403 浏览

operating-system - PIC单片机操作系统

我听说可以使用内置的引导加载程序和您编写的内核为 PIC 微控制器编写操作系统。我还听说它必须是 RTOS。

  1. 这是真的?你真的可以为 PIC 制作一个操作系统内核(使用 C/C++)吗?
  2. 如果是 1,有没有这方面的例子?
  3. 如果是 1,您是否需要任何类型的软件来创建内核?
  4. Microchip 是唯一一家生产 PIC 微控制器的公司吗?
  5. PIC单片机可以在mac上编程吗?

谢谢!

0 投票
2 回答
1704 浏览

c - Micrium uC/OS-III RTOS 中的 Malloc

我们使用的是 Micrium 的 uC/OS-III RTOS。我们正在尝试在 RTOS 上返回 malloc 的值。当我们在 RTOS 启动之前执行 99999 的 malloc(对于 RAM 来说太多)时,我们会得到一个空指针,这正是我们所期望的。

当我们在 RTOS 启动和任务中执行相同的 malloc 时,我们不会得到空指针,这是我们不期望的。不过,系统此时确实冻结了。

有人对此有解释吗?

提前致谢

编辑:

信息:我们使用的是瑞萨电子的 RX62N 微控制器和 GNURX 编译器

该程序实际上并没有冻结。程序“认为”它得到了一个有用的指针(不是 NULL 指针),并继续运行。在某个时刻,程序将其程序计数器更改为 00000000 并停止。所以它不会进入异常,因此我们无法捕获它。

但是,在 RTOS 启动之前调用 malloc 和在 RTOS 启动时调用malloc时会有所不同。不同之处在于malloc的真正深层汇编代码。

在某一点上执行以下指令

当我们试图分配太多 RAM 时,BGTU.B指令不应分支,然后程序继续执行ADD指令。这在启动 RTOS 之前执行malloc时非常有效,但在我们之后执行时失败。

我希望整个情况都很清楚,我试图尽可能地解释它:P

提前致谢

0 投票
3 回答
534 浏览

c - 我无法理解优先级倒置是如何发生的

HPT -> 最高优先级任务。
MPT -> 中优先级任务
LPT -> 低优先级任务

您好朋友,我从许多网站(例如http://www.embeddedheaven.com/priority-inversion-2.htm)阅读了优先级反转。但是我想知道,为什么HPT不能抢占LPT?如果您将阅读第 3.3 节无界反转,它会说明 LPT 是否已获取资源,同时如果 HPT 已准备好但由于 LPT 而被阻止。但是如果 MPT 准备好了,它就会抢占 LPT 并自行执行。然后LPT必须等到MPT完成。一旦 MPT 完成,LPT 就会恢复。一旦 LPT 完成,HPT 就会开始。所以我的问题是为什么HPT不能抢占LPT或MPT?

0 投票
1 回答
803 浏览

c - Micriμm μC/OS-III RTOS 中的分配和释放

我们使用 Micrium 的 μC/OS-III RTOS 和 Renesas 的 RX62N。

我们建立了一个系统,我们必须动态分配和释放数据。我们发现函数malloc()free()不适用于 RTOS。然而,RTOS 对此有一个自定义功能;Mem_HeapAlloc ()函数。这个函数分配了一些 RTOS 的内存'heap'。问题是它没有自由功能,可能是因为一切都进入了堆池

在 RTOS 中,也可以创建一个池。这个池的问题是所有包含的块都需要相同的大小。由于我们分配和释放不同的大小,这对我们来说不是一个好的解决方案。

我们在这里找到了描述内存 RTOS 功能的文档, 第 4 章描述了这些功能。

有人知道我们如何解决这个问题吗?

我们已经拥有的一些解决方案

  • 使所有块大小与最大分配相同。 我们有很多开销,因为最小和最大的分配差别很大。
  • 不要做免费的。 这是没有办法的,会出现内存泄漏。

希望有人可以帮助我们。如果有不清楚的地方,请问我

提前致谢

0 投票
1 回答
196 浏览

c - 类型转换为未定义类型的结构

基本上我正在从 RTOS 中的另一个线程获取数据。该数据是板上的一个引脚。所有 IO 端口都位于 iodefine.h 文件中的结构/联合中。例如,请参阅 Micrium 如何制作它:

如果你问我,这是非常聪明的方式。所以我将此引脚保存为结构中的 2 个字符,称为端口和引脚。

我想以这种方式使用引脚:

steppermotor 是结构。只有这样我才能得到一个错误说

在非结构或联合的情况下请求成员“DR”

我如何能够使用 steppermotor->PulsePort->DR.BYTE 而无需为其创建新变量?我希望有人能帮助我!

0 投票
4 回答
13476 浏览

c - LWIP + RTOS - 如何避免 netconn 永远阻塞线程?

当调用LwIP netconn_accept()netconn_recv()函数时,如果我们使用的是 RTOS,它将阻塞线程并等待连接,直到超时或永远,取决于LWIP_SO_RCVTIME0. 超时持续时间等于SYS_ARCH_TIMEOUT.

在核心包含部分LwIP堆栈SYS_ARCH_TIMEOUT中定义为0xffffffff,所以我认为它不会被更改。

实际上,我希望它检查是否建立了连接,如果没有,则继续线程。但是,如果我打电话netconn_accept(),它只会阻塞线程并永远等待(或很长时间)......我不想改变定义值,SYS_ARCH_TIMEOUT因为我在不同情况下需要不同的超时......

这样做的好方法是什么?谢谢。

0 投票
1 回答
2298 浏览

linux - 将基于 linux 的应用程序移植到 uC/OS-II 平台

我计划在非 Linux 平台上实现 Hiawatha Web 服务器,即 uC/OS-II RTOS。

我需要帮助将依赖 Linux 的 API 移植到 RTOS 平台。

如果已经有可用于在 RTOS 上移植 Linux 的构建库,请告诉我。

提前致谢

0 投票
6 回答
1976 浏览

c - 为什么抢占不能解决优先级倒置?

我想知道为什么抢占不能解决优先级反转问题
如果我们有抢占式内核。那么为什么优先级反转问题没有得到解决呢?

0 投票
3 回答
1141 浏览

operating-system - 操作系统如何处理上下文切换?

据我所知,每个操作系统都需要有一些机制来定期检查它是否应该运行某些任务并暂停其他任务。

一种方法是某种计时器,操作系统将在其到期时检查它是否应该运行/暂停某些任务。

一般来说,比如说在可能是某种 ISR 的 ARM 系统上。

我真正的问题是,我只能将其可视化,而在某处看不到它。有人可以指出一些免费/开放的 RTOS 代码,我实际上可以在其中看到处理抢占/调度的代码吗?