问题标签 [rtx]
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.
arm - 修复了在 KEIL RTX RTOS 上执行任务的时间
我正在使用使用抢先式循环调度程序的 KEIL RTX RTOS。我有一个用于显示数据的 LCD,并且一些任务可以访问此 LCD(还有一些其他任务),这些任务需要固定时间来处理 LCD(例如,第一个任务句柄 LCD 显示其数据 50 秒,50 秒后,第二个任务句柄并显示其数据 10 秒)。我知道我必须使用互斥锁来管理对 LCD 的访问。但我不知道我必须如何管理它的固定时间?LCD 任务处于最低优先级,如果没有任何其他任务要执行,这些任务将被执行以显示消息.
rtos - 为什么事件标志相关的功能在 keil rtx 中的任务之外不能正常工作?
如您所知,事件标志非常有用(例如让任务运行),但不幸的是,它们的控制功能(os_evt_clr/set/wait)在任务主体之外无法正常工作(例如,在中断处理功能中)。作为替代,我使用了一个变量,我在需要时在中断处理程序中对其进行了初始化,然后在另一个任务上使用它来运行 os_evt_set() 函数让 MCU 进入任务。
有更好的方法吗?WBR。
c - 带有消息队列的 Keil RTX 问题
我在使用 Keil rtx 消息队列时遇到问题。我有以下两个线程:send_thread 和 receive_thread。
伪代码:
所以问题是出了什么问题或者我应该如何实现它?我已经调试了地址,我得到了相同的地址。不同之处在于,在 send_thread 中,发送变量是指向指针数组的指针,但在 receive_thread 中只有 void*,我无法访问其中的任何值。
欢迎任何建议。
twincat - TwinCAT 3 或 IntervalZero
我打算测试一个新板的 EtherCAT 通信(假设名称是 XYZ)。所以我打算把XYZ做为Slave并连接到master。为了让我的生活更轻松,我决定在我自己的 PC 上使用 TwinCAT 3 或 RTX64 作为主控(使用 Windows 和四核至强 cpu)。3个问题。1. 这些软件哪个更好,为什么?示例 - 在模块化、进一步的项目、兼容性(软件和硬件)、matlab 集成、成本(也是不可预见的)等方面(可能比我提到的要多)。2. 我可以使用该软件配置一个 EtherCAT 主站,以通过 PC 的现有以太网端口发送数据吗?(我确实读到它们都主要支持 Intel 芯片组,但正在确认)。3. XYZ Slave 是非intel EtherCAT 从芯片组。这会造成并发症吗?(理想情况下它应该'
gcc - 控制 Keil RTX 何时启动
我正在为使用相对复杂的通信接口的 ARM Cortex-M3 编写引导加载程序;这与实际应用程序使用的相同。该应用程序使用 Keil 的 RTX 作为其内核,而通信堆栈依赖于此。当然,使用 GCC。
引导加载程序执行以下基本步骤:
- 启动时,检查有效的应用图像;如果没有可用,则进入升级模式;
- 它检查按钮按下作为进入升级模式的请求;如果发现,则进入升级模式。
- 找到有效图像并且没有升级请求后,它会“启动”应用程序。
这是相当简化的,但它充分描述了我们的目的。
令人惊讶地证明困难的最后一个问题是启动应用程序。想法是禁用中断,设置向量表,堆栈指针,并跳转到新向量表中的应用程序的重置向量。所有这一切都很有效,除了不久之后,我得到了一个硬故障。
通过实验,如果我在一个简单的引导加载程序(不使用 RTX 或者,当然,通讯堆栈)中执行此操作,应用程序的引导工作正常。所以看来RTX是问题所在。
问题是,真正的引导加载程序在进入升级模式之前不需要 RTX。因此,显而易见的方法是在确定需要 RTX 之前不要启动它;但是,它似乎被黑进了启动代码,所以当我进入引导加载程序代码时,为时已晚;事实上,bootloader main() 函数已经是一个线程了!
最好的方法似乎不是启动 RTX(太糟糕了,我没有使用 FreeRTOS!),直到我需要它;但是,这似乎需要一些黑客攻击。另一种方法是以某种方式禁用所有中断和异常,但由于某种原因,我在那里也没有成功。有没有人有这两种方法的例子?
stack - Keil RTX RTOS 线程栈大小
在 Keil RTX RTOS 配置文件中,用户可以配置默认的用户线程堆栈大小。通常,堆栈包含自动/局部变量。“ ZI 数据”部分保存未初始化的全局变量。
因此,如果我在 RTX 配置文件中更改用户线程堆栈大小,堆栈大小会增加,“ ZI 数据”部分大小不会增加。
我测试了一下,测试结果显示如果我增加用户线程堆栈大小。“ ZI 数据”节的大小将与相同的大小同步增加。
在我的测试程序中,有 6 个线程,每个线程都有 600 字节的堆栈。我使用 Keil 构建程序,它向我展示了:
但是如果我将每个线程堆栈大小更改为 800 字节。Keil 向我展示如下:
“ZI 数据”部分的大小从 6484 字节增加到 7684 字节。7684 - 6484 = 1200 = 6 * 200。而 800 - 600 = 200。所以我看到线程堆栈放在“ ZI Data ”部分。
我的问题是:当线程堆栈被放入RAM中的“ ZI数据”部分时,这是否意味着线程中的自动/局部变量将被放入“ ZI 数据”部分?如果为真,则意味着根本没有堆栈部分。根本只有“RO/RW/ZI Data”和堆部分。
这篇文章给了我不同的答案。我现在对此有点困惑。 https://developer.mbed.org/handbook/RTOS-Memory-Model
arm - keil rtx osdelay 没有产生准确的延迟
我正在开发包含 LPC1768 微控制器的电路板。我想做的就是使用 CMSIS RTOS API 的 osdelay 函数创建一个准确的时间延迟。我已将我的 systick 时间滴答计数设置为 10000。但是当我在我的线程中使用 osdelay(1000) 时,它不会像它应该那样创建 1 秒的延迟时间!
这是源代码
现在,我的问题是 osdelay(1000) 没有提供 1000 毫秒的延迟,因为它应该将 systick 计时器刻度值设置为 1000。
arm - IAP Bootloader 无法加载 RTX 应用程序映像
我将软件分为两部分:引导加载程序(不带 RTX)、带 RTX 的应用程序映像。但是引导加载程序无法使用 RTX 加载应用程序映像。Flash 设置如下:
我测试了 3 种方法:(1)使用另一个没有 RTX 的应用程序。引导加载程序可以成功加载应用程序。
(2) 使用 RTX 项目 IROM 设置更改应用程序。我将应用程序项目 IROM 起始地址从 0x08002800 更改为 0x08000000。我将应用程序映像从地址 0x08000000 下载到闪存中。图像可以从 0x08000000 成功运行。
(3) 应用映像 IROM 起始地址设置为 0x08002800。将bootloader和app镜像下载到flash后,我在keil中一步步调试app项目。我发现有一个“osTimerthread 堆栈溢出”错误。然后主线程栈也溢出了。我试图增加堆栈大小,但它不起作用。我发现该应用程序在 RTX 内核切换中表现得很明显。所有线程都处于等待状态,并且没有运行。
ps,我在keil调试的时候,test item(2)在内核初始化的时候也会出现栈溢出错误。item(2) 到目前为止工作正常。所以我只是把任何需要的信息放在这里。
eclipse - 使用 Eclipse 实现 RTX
我有一个关于 RTX (RTOS) 的问题,我必须在 NUCLEO-F411RE 板 (Cortex M4) 上实现 RTOS RTX。我必须用 Eclipse 来做,但我不知道该怎么做。
此外,我尝试使用 gcc 编译器对其进行编译,但出现了许多错误,例如:
有人可以帮我解决吗?
sockets - 连接 TCP 套接字失败后的正确程序是什么?
我正在使用异步调用编写 TCP 客户端。如果应用程序启动时服务器处于活动状态,则它会连接并正常通话。但是,如果第一次连接失败,则随后对 connect() 的每次调用都会失败,并显示 WSAENOTCONN(10057),而不会产生任何网络流量(通过 Wireshark 进行检查)。
当前代码在收到错误时不会关闭套接字。TCP 状态图似乎不需要它。它只是等待 30 秒,然后再次尝试 connect()。
随后的 connect() 和随后的 read() 都返回 WSAENOTCONN 错误。
我需要关闭套接字并打开一个新的吗?如果是这样,哪些错误需要我关闭套接字,因为有很多不同的错误,其中一些我可能永远不会在测试台上看到。
您可以假设这是 MS Winsock2,尽管它实际上是 Interval Zero RTX 2009,在某些地方略有不同。