问题标签 [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.
c - FreeRTOS 中的队列数组问题
我正在构建一个 FreeRTOS 应用程序。我创建了一个模块,它从另一个模块注册一个 freeRTOS 队列句柄,当这个模块模块发生中断时,它会向所有注册的队列发送一条消息。但似乎我能够从队列中发送消息,但无法在另一个模块中接收它。
这是我的代码。
远程模块:-
这是注册模块
几点:-
- xQuehandle 的类型定义为“void *”
- 如果删除注册的东西,并且如果我通过外部获取指针,则代码可以直接使用 xQueueSendFromISR 中的队列指针。
需要任何建议或信息吗?
avr-gcc - 无法从 USART 获取输入 - FreeRTOS - AT32UC3A0512
只是尝试使用 FreeRTOS。以下是我的设置 -
- 微控制器 - AT32UC3A0512
- 板 - EVK1105
- 使用 FreeRTOS
- 环境 - 带有 ASF 最新 2.3 框架的 AVR Studio 5
我刚刚从示例项目 FreeRTOS 创建了一个新项目。我目前正在检查 USART。运行示例项目时,我可以通过 USART 将字符从我的开发板传输到 PC,但是当我在我的 PC usart 终端程序(使用 Putty)上键入或输入内容时,我什么也看不到。任何人都可以建议可能出了什么问题吗?或者我是否需要更改当前示例代码中的代码以在我的终端程序上为 USART 获取输入和显示?
谢谢...
exception-handling - 在 XP 上使用 MinGW 处理内存访问异常
我正在尝试在 XP 上使用 MinGW GCC 工具链以及来自嵌入式项目的一些供应商代码,这些代码访问高内存(> 0xFFFF0000),我相信这超出了 XP 中“平民”进程中允许的虚拟内存地址空间。
我想以某种方式自己处理内存访问异常,以允许在异常之后的指令处继续执行,即忽略它。有什么方法可以用 MinGW 做到这一点吗?还是使用 MS 工具链?
因此,大大简化的图片是:
更多细节:我正在使用 AVR32-gcc 工具链在带有 freeRTOS 的 Atmel AVR32 平台上开发一个嵌入式项目。开发/调试独立于硬件(和慢速 avr32 模拟器)的高级应用程序代码是可取的。各种 gcc、makefile 和宏技巧允许我在 MinGW/Win32 freeRTOS 端口环境中构建我的 Avr32/freeRTOS 项目,并且我可以在 eclipse/gdb 中进行调试。但是(供应商提供的)Avr32 代码中的高内存硬件访问会使 MinGW exe 崩溃(由于内存访问异常)。
我正在考虑这些方法的一些组合:
1)管理SW中的访问异常。理想情况下,我会创建一种硬件模拟器,但我认为这很困难并且涉及一些粗糙的汇编代码。许多异常可能会被忽略。
2)创建Avr32头文件的修改副本,以便将硬件寄存器#defines重新定位到用户进程地址空间(并创建一些结构和链接器部分来提交这些虚拟内存空间区域)
3) 函数调用的条件编译导致 highMem/HW 访问,或者更多的宏技巧,以最大限度地减少“真实”硬件目标代码中的代码混乱。(这个项目还有其他开发人员。)
任何建议或有用的链接将不胜感激。
这个页面在正确的轨道上,但似乎过于复杂,并且是我想避免的 C++。但我可能会尝试一下,没有其他建议。 http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh
avr - 在 FreeRTOS 中为 USART 接收创建新任务
我正在使用带有 AVR Studio 5 的 EVK1105 开发板作为我的 AVR 项目的开发 IDE。我在其中使用 FreeRTOS。我在这块板上有 3 个 USART 端口。一个外部模块通过 USART-RS232 模式连接到我的 AVR32 板。它以 19230 波特率、7 数据位、奇校验、停止位 1 和正常通道模式将连续串行数据发送到我的 USART0 板上。为此,我创建了一个新任务。在每 9 个数据字节之后,它发送 '\n' 和 '\r'。所以在我的任务中,我继续在字符串缓冲区中收集 9 个数据字节,然后在 USART1 上传输它。我正在使用轮询方法从正在接收端口的 USAR0 收集数据。但是我在接收数据时遇到了问题。我不知道是时间问题还是调度程序在收集数据时切换了任务。但我没有得到所需的数据。
以下是我已经检查过的故障排除 1. 将我的外部模块连接到我的 PC 超级终端,这给了我完美的结果。2. 实现了使用从 USART0 接收的相同操作,并且无论接收到什么都将传输到 USART1,就像没有 FreeRTOS 一样。它工作正常。
请提出一些想法可能出了什么问题。我正在使用队列在 Tx 和 Rx 任务之间进行通信,以将字符串缓冲区从 USART0 传递到 USART1。处理队列有问题吗?如何解决队列问题?
我在 Rx Task 的无限任务循环中使用了 50 毫秒的延迟。它会产生问题吗?如果我不使用任何延迟,操作系统就会崩溃。请提出一些好的做法来在 FreeRTOS 中创建新任务,这样我就不会遇到任何时间问题。
c - FreeRTOS、Eclipse IDE 和语法错误
在 Eclipse 中处理 FreeRTOS 代码时,我有点烦恼,我不确定是我自己还是其他人也有这个问题,但我看到我的代码中突出显示了很多语法错误,但它编译/执行得很好。语法错误似乎是由 FreeRTOS 特定代码引起的,例如:
或者
或者
我想知道是否有一种方法可以配置 Eclipse 以正确解析此语法。
c - 甚至在进入 main
甚至在进入 main 之前,复位中断向量 SYSRSTIV 就设置为 001Eh(外设/配置区域获取 - PERF)。为什么会这样?
使用的 cstartup.s43 文件
freertos - xtaskcreate-getting 错误
您好,我正在为 Tux Racer 游戏应用程序(MSP430BT5190 目标板)连接到调试接口(连接到 PC 的 USB)的 EZ430-RF2560T 目标板。我正在研究加速度计应用程序代码。打开蓝牙后,它会为函数
xTaskCreate((pdTASK_CODE) user_task_routine, (const signed portCHAR *)USER_TASK_NAME, USER_TASK_STACK_SIZE, (unsigned portLONG *)NULL, (unsigned portBASE_TYPE)USER_TASK_PRIORITY, ( xTaskHandle *) NULL);
请让我知道可以做什么......谢谢阿什温
avr - 如何在 C 中为字母数字 4x3 键盘编写代码
目前我正在开发一个具有以下设置的项目。
- AVR微控制器
- IDE - AVR 工作室
- 操作系统 - FreeRTOS
对于输入,我使用 4x3 的键盘矩阵。我已经为 4x3 键盘进行了编码,以将输入作为数字。但现在我想让它变成字母数字。就像我们在手机键盘中看到的那样。
示例 - 键 2 将用于输入 2、a、b、c。单击键 2,我们将得到数字 2,双击键 2,然后我们将得到“a”,三次按下键 2,然后我们将得到“b”,四次按下键 2,然后我们将在屏幕上得到“d”。
我希望你们都明白我上面的意思。任何人都可以在 C 中给出一些代码想法来实现这种类型的功能吗?
c - 在免费 RTos 中实现调度程序
我需要帮助。我有一个项目来为 freeRTos 构建一个替代调度程序,使用不同的算法,并尝试在操作系统中替换它。
我的问题是:
平时可以吗?(大约几个月)
如何在整个 OS 代码中识别调度程序的代码?
c - GCC 别名在翻译单元之外起作用 -AKA- 这甚至是适合这项工作的工具吗?
我在 STM32 (Cortex-M3) 上使用 FreeRTOS,并使用 ST 的 CMSIS 库来引导所有内容。
CMSIS 库SVC_Handler
在启动“.s”文件中定义了弱符号。必须在某处覆盖它才能在中断向量表中获取您的 ISR。FreeRTOS 定义了vPortSVCHandler
,这是我想要处理 SVC 中断的 ISR。
我想使用我的应用程序代码(即不修改 FreeRTOS 或 CMSIS 源代码)将两者“粘合”在一起。我认为别名是完成这项工作的正确工具,所以我尝试了这个(在单独的源文件 main.c 中):
这导致:error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'
事实证明,根据此处的 GCC 文档http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html,为了使用该alias
属性,您不能在翻译单元之外对符号进行别名。所以我想我会尝试extern
将符号放入 main.c 中,如下所示:
这会产生相同的错误。有什么建议么???
我真的很想避免修改任何一个库。我知道我可以编写一个SVC_Handler
简单地调用的函数vPortSVCHandler
,但这可能会给 ISR 增加不必要的开销(可能取决于优化设置)。注意:FreeRTOS 示例通过自定义启动文件完成此操作。我正在寻找一种从 C或我的链接器脚本中执行此操作的方法。
- 编译器版本:gcc 版本 4.5.2(Sourcery G++ Lite 2011.03-42)
- 目标:arm-none-eabi