问题标签 [freertos]
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.
ubuntu - 为 x86 构建 FreeRTOS
我在网上看到可以在 Windows 上为外部设备构建 FreeRTOS。你可以在 ubuntu 上为 x86 构建它吗?
谢谢
operating-system - 我可以在 FreeRTOS 上下文切换期间保存 MSP430 CRC 寄存器吗?
我在中等数据模型中使用带有 FreeRTOS 7 的 MSP430F5418。
我想在 FreeRTOS 上下文切换上保存 MSP CRC 寄存器。我像这样编辑了porttext.s43。
在保存上下文宏中,将 15 个寄存器压入堆栈后,我压入 CRC 寄存器。(CRCDI是要保存的MSP寄存器)
在恢复上下文宏中,我在弹出 15 个寄存器之前弹出了 CRC。
它应该可以工作,但事实并非如此。程序控制将不知道位置。
有人有什么想法吗?
c - 如何在 C 中初始化任务控制块堆栈?
我想将给定任务的初始程序计数器放入任务自己的堆栈中。这样我就可以恢复堆栈上下文以开始运行任务。
有没有人有很好的资源或知道如何在 C 中做到这一点?
到目前为止,我已经为给定任务分配了一个堆栈。
这是我在汇编中找到的一个示例:
低字节首先被压入 TASK2 的堆栈,然后是高字节。
c - 从另一个线程使用 va_list
我在一个小型嵌入式系统上使用 FreeRTOS (newlib),发现 printf 和家庭浪费了大量的堆栈空间。我有很多任务,而且我没有足够的内存来使每个堆栈都足够大以支持 printf() 调用。为了解决这个问题,我正在创建一个“printf 服务器”任务,该任务将有一个大堆栈并代表其他任务执行所有 printf()。
所以我的问题是,将 va_list 传输到另一个线程(任务)的正确方法是什么?下面的示例生成垃圾参数。
简单介绍一下它是如何工作的:task_printf() 会将其参数放入静态变量中,然后向 server_task 发出信号以执行实际打印。当 server_task 完成时,它会通知客户端继续。
c - 未声明的变量交叉 C 链接器或编译器
我正在尝试使用自己的 Makefile 和链接器文件运行 freeRTOS。问题是当我试图用 3 个文件编译项目时:
task.c - 有问题:
文件中的宏端口ALT_GEN_RUN_TIME_COUNTER_VALUE()
FreeRTOSConfig.h
最后是我要编译的 main.c 女巫:
错误前的编译器操作:
在我看来,变量:ulTIM6_OverflowCount 应该是全局的,并且在文件 task.c 中可见这是来自 freeRTOS 项目的示例,我从女巫那里删除了几乎所有代码,但它是 IAR 专用的,没有 makefile。制作文件来自 CortexM3 的优秀教程,它可以选择添加所有 INC 和 SRC 目录,链接器也来自这个项目。我的问题是我必须在哪里搜索错误:在链接器中?编译器?还是在项目中?当我使用另一个链接器(来自 chibiOS 项目)时,我没有收到任何错误,但我得到了一个损坏的 elf 文件。链接器是否有可能没有看到 main.c 字段?或者我忘了包含一些文件?我整天都在调试这个问题,现在我需要一些新的想法或提示。
非常感谢。
c - 如何在使用 FreeRTOS 时保持代码可移植性
我对如何在我的应用程序中使用 FreeRTOS 感到困惑。让我提出一个简单的场景。假设我有 main 和一个具有一些硬件特定代码的模块。该代码可以用于控制系统或传感器中的特定电机......具有定义角色的任何硬件。在 module.c 我有一个名为ModuleNameTask
. 在main
我使用创建任务xTaskCreate
并通过ModuleNameTask
. 由于 myModuleNameTask
是在 module.c 而不是 main.c 中定义的,因此我现在必须在 module.c 中包含一些 FreeRTOS 才能使用vTaskDelay
. 我不喜欢将这些文件包含在 module.c 中的事实,因为我觉得它不再可移植。
那么,我该如何处理呢?我应该ModuleNameTask
从 module.c 中删除它并将其放在 main.c 中吗?或者只是接受我必须在 module.c 中包含一些 FreeRTOS 的事实。有什么建议吗?
c++ - 使用 GCC 编译 FreeRTOS,使用 G++ 编译应用程序代码
我有一块带有 Cortex M4F 的 Stellaris Launchpad 板。我想通过我自己的一些 C++ 代码在板上使用 FreeRTOS。然而,FreeRTOS 是用 C 语言编写的,因此不能用 G++ 编译;我试过了。
我在某处读到我应该用 编译 FreeRTOS gcc
,然后用 编译我的应用程序代码g++
,然后使用链接器将它们拉到一起。这是有道理的,但我真的很想知道如何将这种行为放在 Makefile 中。我发现这个 Makefile让我更加困惑。
目前,我只是使用随 Stellaris 演示中的 FreeRTOS 示例一起分发的 Makefile,但这只是为 C 代码设置的。这个问题问的问题类似于我所追求的,但我无法理解如何使用 GCC 编译 FreeRTOS 以及使用 G++ 编译我的其余代码。
FreeRTOS 显然将其代码包装在extern "C" { }
指令中,但在编译 FreeRTOS 代码库时尝试使用 G++ 仍然失败。
我不喜欢在 SO 上发布大量代码,但我认为信息越多越好。Stellaris 演示有一个通用makedefs
文件:
上面的文件是由它Makefile
自己包含的(如下):
我的一些目录结构如下:
如果我正确地说 FreeRTOS 必须使用 GCC 编译,然后与我的 C++ 项目代码链接,我该如何修改我当前的 Makefile 来做到这一点?我想要一个合理通用的解决方案,以便我可以在其他项目中重新使用它,但我对 C/C++ 构建过程或 Makefile 了解不多,因此我提出了这个(冗长的)问题。我不想/意思听起来像是在问“为我做这个”的问题,但尽管在 Google 和 SO 上搜索,我真的无法弄清楚如何做到这一点。
c - RTOS 数据记录器示例
我正在尝试在 Cortex M0 (LPC11U14) 上开发数据记录器,我正在考虑使用像 FreeRTOS 这样的实时操作系统,这样我就可以有一个将数据写入 SD 的低优先级任务,以及多个更高优先级的任务- 获取传感器数据的优先级计时器。
有谁知道任何可以作为参考设计的代码示例?我知道如何创建任务/计时器,但我对将数据从计时器传递到写入任务的有效方法感兴趣。如果已经存在一个可以用作代码库的好的数据记录器项目,我对重新发明轮子犹豫不决?
c - 可以不轮询 FreeRTOS taskGetTickCount() 吗?
我想我要么 a) 误解了 FreeRTOS taskGetTickCount() 函数的工作方式,要么 b) 我们的端口不太正确。
我有一些调试,我正在显示 xTaskGetCount() 的输出。每当我完成 vTaskDelayUntil() 时,它似乎都已更新并且是最新的。但是如果我做一个旋转等待,等待它增加,它永远不会。我认为中断会触发并增加该值。但我目前只运行一项任务,所以也许它足够聪明,永远不会检查重新安排并且 tickCount 永远不会更新?任何可以让我直接了解 FreeRTOS 滴答计数如何工作的人,我都会非常感激。
编辑:示例片段:
这将永远旋转,远远超过 tick = 1 ms 时暗示的 25 ms。输出将一遍又一遍地不断列出相同的值。如果我在循环底部添加一个 vTaskDelay() ,它会健康地增加,并最终退出。