问题标签 [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.

0 投票
1 回答
5187 浏览

c++ - 将 FreeRTOS 移植到 Arduino MEGA 2560 Rev3 (ATmega2560)

我目前正在Arduino 平台上实现基于FreeRTOS的程序。

我想在这个项目中使用Arduino MEGA 2560 Rev3(基于ATmega2560),但我找不到工作的 port.c 文件。

任何人都可以分享一个工作 port.c 吗?

我正在使用 Eclipse IDE、WinAVRAVR PluginArduino Lib、FreeRTOS 7.6.0(我最终将切换到 v8.0.0)和 C++ 作为主要编程语言。

谢谢。

编辑:

我遇到了avrfreertos,它为 ATmega2560 生成了一个 FreeRTOS 静态库,但是当我将我的项目链接到它时,我收到以下错误:

编辑:

我找到了解决链接问题的方法

0 投票
1 回答
6310 浏览

rtos - 来自 ISR 的 FreeRTOS Sempahore 无法正常工作

我需要制作一个数据采集设备,其任务是对一些 GPIO 进行采样并记录 GPIO 状态并通过 UART 将其发送到 PC 以在 PC 上显示。我选择的算法是(请纠正我,因为我是 RTOS 的新手)创建一个以 1us 运行的计时器,然后轮询所有所需 GPIO 的状态。为此,我在 freertos 演示中使用了一个计时器。并在定时器 ISR 中给出一个信号量,它应该调用一个完成所有剩余工作的任务。

不知道为什么,但我编辑的代码不起作用

我的主要()是

任务 1我写的一个虚拟函数只是为了测试信号量是否工作

定时器 ISR 处理程序

当我在 ISR 处理程序中放置断点时,它会出现但 GPIO 没有切换(我放置在任务 1 中)

我是 RTOS 的新手,所以如果我错过了代码中的任何基本内容,请原谅我

我只需要从 ISR 处理程序中提供一个信号量

经过一些锻炼后,我发现所有问题都是在调用 xSemaphoreGiveFromISR 时发生的。控件转到 vAssertCalled 函数并停留在无限循环中

xSemaphoreTake() 总是返回 pdFALSE

0 投票
1 回答
1971 浏览

arm - 小型 ARM 微控制器的 RTOS 内核之间的可量化差异

有许多不同的 RTOS 可用于微控制器。我专门寻找支持 ARM Cortex M 处理器的 RTOS。另外,我对闭源解决方案不感兴趣。

尝试从网站和邮件列表中比较每个 RTOS 的相对优点似乎非常困难,因为它们大多似乎具有相同的功能并且做同样的事情。只有在尝试将每个 RTOS 用于某些任务之后,真正的差异才会变得明显。

我知道这是一个有点主观的问题,可能很难回答——但肯定有很多人实际上尝试了几种不同的 RTOS,并对每种 RTOS 的相对优点形成了意见。

我对 FreeRTOS、ChibiOS 和 Coocox CoOS 特别感兴趣,但也非常欢迎其他选择。


例如:在 ChibiOS 中,ISR 似乎可以调用任何系统函数,但这些调用必须包装在chSysLockFromIsr()/中chSysUnlockFromIsr(),并且在这些部分中代码不可抢占。isr_在 CoOS 中,唯一可调用的函数是以isr_PostSem()、和 开头的函数isr_PostMail(),但这些函数内部使用服务请求队列,这意味着大部分请求是可抢占的。isr_PostQueueMail()isr_SetFlag()

0 投票
1 回答
119 浏览

c++ - 关于如何将遗留嵌入式应用程序限制为实时应用程序的建议

我正在接管一个“遗留”嵌入式系统应用程序,不是很遗留,我首先担心的是我发现在开发过程中,在某些时候应用程序的时间限制在需求中丢失了的项目。现在,我的任务是重构它并使其按预期实时化。

该项目是为 C 和 C++ 中的 ATMEL UC3 完成的。它在 FreeRTOS 上运行,有 6 个任务。5 用于管理外部设备和另一个,以最低优先级和最重的任务为主程序。我做的第一件事是测量主要任务所花费的时间,有时它会脱离死线并不奇怪,因此完整的任务是在几个周期内执行的。

谁能建议我在这种情况下可能采取的主要观点是什么?

你会怎么做?我知道我应该遵循所有执行路径的流程并计算指令,然后选择最差的执行路径,并以芯片的频率给我实时执行。那是理论上的,是否有任何工具,技巧或程序可以让它更容易一些?

更新:

出于保密原因,我无法分享来源。此外,我一直在深入挖掘,发现主要延迟显然是由队列大小产生的。大多数队列是为保存 2 或 3 条消息而创建的。我需要做一些测试才能在此处提供更多信息。理论上,如果队列被填满,那么其余进程将无法再发送,直到再次有空闲空间来接收更多消息。然后进程暂停,导致连续重新调度。我的想法是将队列大小增加到 10,以查看它是否可以提高性能和时间。

更新 2 从建议开始,当我在黑暗中发现它们非常有帮助时,我遇到了一个名为“理解”的工具,它不是免费的,但可以帮助我获得分析和字符。您还可以看到复杂函数的字符流,因此您可以看到最长的执行路径。

0 投票
2 回答
7398 浏览

c - 从 freeRTOS 运行应用程序

我目前正在为我公司正在开发的消费电子产品开发操作系统。我已经决定将 freeRTOS 作为我们操作系统的主干,并且正在努力在操作系统中实现硬件功能。但是,我遇到了一个关于在 freeRTOS 中运行 3rd-party 应用程序的问题。

最初我认为一个任务是一个应用程序,基本上你有“myapplication.c”和“myapplication.h”包含你所有的应用程序必要的功能,代码将驻留在任务内的for(;;)循环中(充当一个主while循环)。然后,当用户决定运行该应用程序时,函数指针将传递给队列,然后我的 app_launcher 任务使用该队列使用 3rd 方任务或应用程序创建新任务。

然而,这种方法的问题是操作系统已经被编译并驻留在微控制器上,并且应用程序可以根据用户认为合适的方式安装和删除......所以显然应用程序需要从操作系统编译和执行。在标准的 unix 机器上,我会使用 fork 之类的东西来选择可执行文件并为其提供自己的进程。但是我在 freeRTOS 中找不到类似的功能。我的另一个想法是使用脚本语言进行应用程序开发,但我再次不确定如何启动这些应用程序...

所以问题是,我如何让 freeRTOS 运行来自 3rd 方开发人员的尚未融入操作系统的应用程序?

0 投票
1 回答
1264 浏览

freertos - 如何在 FreeRTOS 中进行文件处理

我在linux上写了一个驱动程序,现在我想将它移植到freeRTOS,我遇到了麻烦。例如文件处理 API,如 fseek、opendir、readdir、fopen、fwrite、ftell 如何在 freeRTOS 中找到备用。

0 投票
1 回答
2077 浏览

avr - Atmel AVR Studio 6 使用 Arduino Uno (ATmega328p) 和 FreeRTOS

大家好,

我想使用我的 Arduino Uno 开始使用 freeRTOS,它在 Atmel AVR Studio 6 上使用 ATmega328p。

我正在使用 Windows 7。

我进入了本教程:

http://www.jayconsystems.com/tutorial/atmerpt1/

其中描述了如何安装和准备 Atmel AVR Studio 6 以使用 ATmega328p。

我不明白我应该在步骤 5A 中做什么,它告诉我要执行以下操作:

转到工具 -> 外部工具...使用以下设置创建新工具:

标题:串行程序

命令:C:\arduino-1.0.1\hardware\tools\avr\bin\avrdude.exe

(更改它以匹配您的 arduino 安装文件夹并找到 avrdude.exe)

-CC:\arduino-1.0.1\hardware\tools\avr\etc\avrdude.conf -patmega328p -carduino -P\.\COM3 -b57600 -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName)。十六进制“:我 // *

注意:我的计算机上确实安装了 avrdude.exe,位于以下位置:

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe

所以我的问题是:

1)在*行上, -CC 是什么意思,它是否需要在参数或初始目录中(在外部工具对话框中)?

2)正如它所提到的,avrdude.conf的路径(在我的情况下确实如此)通过X86文件夹,那么我需要输入的行应该如何(因为它提到了一些关于双引号的东西)?

3) 在我将解决所有这些问题之后,AVR Studio 6 如何/在哪里/是否有一个“简单的通用模板”项目来开始使用 freeRTOS?

我遇到了本教程(使用不同的板),尽管我使用的是另一块板(我的 ATmega328p),但我可以“跟随”它吗?

感谢提前分配,

家伙。

0 投票
0 回答
425 浏览

c - 在 makefile 中包含问题?

在makefile中有写:

并通过 cmd 窗口说:

所以我的问题是,这条线是什么意思('-include' 没有文件名),我该如何解决这个问题?

0 投票
1 回答
2095 浏览

c - arm-none-eabi 中没有头文件检查

在命令窗口中,有一个错误!请看下文!

我正在使用 Sourcery_2011_09_ARM_EABI。但是在这个文件中没有头文件名 check.h

在文件 lwip_unittests.c 中:

我需要一个文件 check.h,我在哪里可以得到这个?

如果 check.h 将在文件 Sourcery_2011_09_ARM_EABI 中实现,它会工作吗?

或者我是否需要将 check.h 更改为 tree-check.h 或其他名称,即在 Sourcery_2011_09_ARM_EABI 中实现?

0 投票
0 回答
161 浏览

debugging - 工作区中功能集成后杂乱无章的代码执行流程。(瑞萨 MCU,HEW IDE)

MCU:瑞萨 RX62N IDE:HEW

在我在工作区中集成了一个 SD 卡处理程序例程后,我遇到了一个奇怪的程序执行流程,该工作区以前按顺序运行。

对于函数

执行流程必须是从上到下的顺序。它必须到达 L1(第 1 行),依次到达 L5、L6、L8(然后是 L13、L16、L17...L26),最后到达 L10。

但我面临的问题是,在

被调用时,integratedFunction() 侧代码行的执行不是连续的。

当调用integratedFunction时,微控制器进入L13,然后直接跳转到L19,然后跳转到L16,然后跳转到L23,然后跳转到其他函数中的另一行...... [请注意,我使用E1调试器来找出这样的一种行为]。当 IntegratedFunction 单独单独测试时,它会按顺序执行。

另一件事,分配给代码行的内存位置与代码以随意方式执行的增量顺序相同,即 PC 计数器按应有的方式递增,这只是为什么没有分配内存位置的问题正如其流程所暗示的那样,以增量方式集成功能中的代码行。

这种不稳定行为的可能原因是什么?