问题标签 [micrium]
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.
c - 动态 C/Rabbit 上的 Micrium uC-OS/II - 可能存在任务不足
我正在尝试在 Micrium uC-OS/II 下的 Dynamic C 中运行 2 个任务。一个任务是 http 处理程序,另一个从串行端口读取。串口任务似乎阻止了 http 任务的运行。任何想法为什么会这样?我认为 uC-OS/II 是抢占式的。
两个线程都设置为相同的默认优先级。
c - 在 uC-OS/II 中从 USB 记忆棒读取/写入文件
我有一块带有 ARM 处理器和 micrium RTOS 的板子。我需要从 USB 记忆棒读取/写入文件。例如,重命名文件的标准函数是下一个 -
我需要将哪个路径写入 sExistingName 以指向我的 USB 记忆棒上的文件?
c - LinkedList 添加元素
我们在 C 中的 LinkedList 有问题。当我计算列表中应该有多少节点时,我总是得到 1
LL计数:1
这是列表代码的添加、计数和获取最后一个元素:
它是这样调用的:
其中 LL * 列表;是一个全局变量,而 temp 在本地范围内。我希望任何人都可以看到我哪里出错了
问候,Sjaak 和 Gerrit
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
提前致谢
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 章描述了这些功能。
有人知道我们如何解决这个问题吗?
我们已经拥有的一些解决方案
- 使所有块大小与最大分配相同。 我们有很多开销,因为最小和最大的分配差别很大。
- 不要做免费的。 这是没有办法的,会出现内存泄漏。
希望有人可以帮助我们。如果有不清楚的地方,请问我
提前致谢
c - 类型转换为未定义类型的结构
基本上我正在从 RTOS 中的另一个线程获取数据。该数据是板上的一个引脚。所有 IO 端口都位于 iodefine.h 文件中的结构/联合中。例如,请参阅 Micrium 如何制作它:
如果你问我,这是非常聪明的方式。所以我将此引脚保存为结构中的 2 个字符,称为端口和引脚。
我想以这种方式使用引脚:
steppermotor 是结构。只有这样我才能得到一个错误说
在非结构或联合的情况下请求成员“DR”
我如何能够使用 steppermotor->PulsePort->DR.BYTE 而无需为其创建新变量?我希望有人能帮助我!
middleware - 机器人中间件(OpenRTM、OROCOS、RSCA、ASEBA 等)支持移植到 RTOS(Micrium、QNX、Keil、FreeRTOS?
我有问题要问你。
有一些开源机器人中间件,其中包含一些供机器人开发人员执行 I/O 工作的库。它们是非常强大的工具,可以节省大量时间。它们例如OpenRTM、OROCOS、RSCA等......
在一个项目中,我们将开发一个机器人轮椅,它可以执行一些自主行为,例如避障、move2goal、跟随走廊等。我们将使用 RTOS 来组织 I/O 内容和行为的选择操作。
我想知道是否有任何 RTOS(mcOS-II、QNX、Keil等)具有这些中间件的端口?我可以将它们安装到这些 RTOS 上吗?
对不起,我的英语不好。希望你明白我的意思。
我最诚挚的问候..
filesystems - micrium 文件系统获取剩余空间量
我想知道 uC/FS 是否有任何内置函数来获取 FAT32 格式的 SD 卡上剩余的内存量。
非常感谢。
PS。我环顾四周,但似乎无法在手册上找到它。
embedded - ST32 上的 FATFS,设备配置为 USB 驱动器
我目前正在使用 Micrium OS-II 为 ST32 (STM32F103xC) 开发应用程序。到目前为止一切都很顺利,但我现在遇到了障碍,无法继续。
该板被配置为使用 SD 卡作为 USB 存储设备,以便主机 PC 可以复制保存在设备上的文件。这很好用,因为可以在 Windows 资源管理器中查看当前 SD 卡上的文件。
但是,当我尝试使用 FATFS 在我的程序中创建文件时,f_open() 返回 FR_NOT_READY。为了进一步调查,我构建了一些将文件写入 SD 的示例代码,它工作正常。所以我在我的程序中移动了编写代码,我发现如果我在启动 OS 多任务处理之前调用 f_open,它可以正常工作——我可以打开一个文件并写入它。在启用刻度之后(但在创建任务之前)立即放置代码会返回到获取 FR_NOT_READY。
我不确定我知道这意味着什么。我可以写入文件的位置是否有限制?写作时是否必须禁用多任务处理?(哎呀,肯定不是?)只是我无法写入我目前用作 USB 设备的 SD 卡吗?
memory - 运行 Micrium OS-III 的 ARM 的 IAR - 了解内存使用情况
- 如何通过生成的 MAP 文件确定任务使用的堆栈大小?
- 如何确定ARM的RAM中堆栈和堆的大小
- 如何确定是否需要为任务分配更多堆栈大小?