问题标签 [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.
embedded - 嵌入式目标到主机通信
我有以下问题:
一个微控制器,可以通过几个通信接口与 PC 交谈:RS232,USB 存在。以太网不可用。该软件是带有可选嵌入式操作系统的裸机。
硬件并不重要,因为它适用于任何微控制器和物理通信接口。
同时需要几个沟通渠道:
- 1 用于简单的控制台 - 调试目的:uC <-> PC
- 1 用于从 ADC 获取实时样本到 PC:uC -> PC
- 1 用于将实时样本从 PC 发送到 DAC:PC -> uC
- 1 设置采集/转换、启动/停止等不同参数:uC <-> PC
理想情况下,应仅使用一个物理接口 RS232 或 USB(首选)。
是否已经有一些东西可以在单个物理通道上复用不同的通道?消息传递,远程过程调用。
c - FreeRTOS 信号量
以下是关于 xSemaphoreTake() 函数的 FreeRTOS api-reference http://www.freertos.org/a00122.html的摘录:
我的问题是:我是否已经在这里有了信号量,或者我是否必须
xSemaphoreTake( xSemaphore, (portTickType) 10 )
像这样显式调用:
c - 为什么无法使用 tftp 上传文件?
是否需要在多次迭代中每次上传文件时都建立连接以保持堆栈大小?
我得到了一个 calloc 失败的错误。
我正在使用带有多线程的freertos。
embedded - 令人沮丧的 FreeRTOS xQueueCreate() 限制
我正在尝试使用 aqueue
将我的 UART ISR 中的字符缓冲到后台任务。我希望队列长度为 512 字节。不幸的是,这是不可能的,因为 size 参数的类型unsigned portBASE_TYPE
对于 xmega256a3 来说是单字节 ( char
)。队列的最大大小浮动是否有原因portBASE_TYPE
?而不是uint16_t?
我很好奇其他人是否也遇到了同样的限制,如果有的话,他们做了什么。
c - 努力在 xmega256a3 上实现对 FreeRTOS 的无滴答支持
我正在努力获得为我们的 xmega256a3 端口的 FreeRTOS 工作的无滴答支持。环顾四周,试图更好地理解幕后,我惊讶地看到以下行vTaskStepTick()
:
我没有configASSERT
打开,但我认为如果我打开了,那会经常引发问题。xTicksToJump
是增量时间,但是xNextTaskUnblockTime
,如果我正确阅读代码,是绝对滴答时间吗?我弄错了吗?
我的睡眠功能,按照文档示例的模式如下所示:
如果有人在那里看到明显的问题,我很想听听。它展示的行为有点有趣。为了测试,我正在运行一个延迟 2000 毫秒的简单任务循环,然后简单地切换一个我可以在我的示波器上观看的引脚。在我的函数中添加一些 printf,它会正确执行第一个,但是在我退出它之后,它会立即重新进入,但值接近 65535。它尽职尽责地等待,然后让下一个再次正确,然后再次错误(长),来回交替。
embedded - 在多任务环境中喂养看门狗的策略
将一些嵌入式代码移至 FreeRTOS 后,我对看门狗有一个有趣的困境。看门狗定时器对于我们的应用来说是必须的。使用 FreeRTOS 对我们来说也是一个巨大的福音。当应用程序更多是单任务时,它会在其逻辑流程中的及时点向看门狗提供信息,以便我们可以确保任务及时进行逻辑进展。
但是,对于多项任务,这并不容易。一项任务可能由于某种原因被绑定,没有取得进展,但另一项任务做得很好并且取得了足够的进展,可以让看门狗开心地吃饱。
一个想法是单独启动一个单独的任务来喂养看门狗,然后使用一些其他任务定期递增的计数器,当看门狗任务滴答作响时,它将确保所有计数器看起来都在其他所有任务上都取得了进展任务,如果是这样,继续喂看门狗。
我很好奇其他人在这种情况下做了什么?
macos - 在 Mac 上与 AVR 微控制器交互
我最近购买了ATiny84 微控制器,我想知道是否可以从运行 snowleopard 的 Macbook Pro 上传代码。具体来说,我可以运行 c 文件和 FreeRTOS 吗?
gcc - 带有 gcc 的 STM32F4 上的 FreeRTOS 堆栈损坏
我试图让 FreeRTOS 在我的 stm32f4discovery 板上运行。我已经安装了召唤臂工具链并创建了一个 Makefile 来编译我的代码。这是生成文件:
我修改了 FreeRTOS 演示项目的文件夹 CORTEX_M4F_STM32F407ZG-SK 中的项目(删除现有任务并创建我自己的)。这是主要功能:
我在 FreeRTOSConfig.h 中将 configMINIMAL_STACK_SIZE 配置为 4096,并且代码运行良好,因为任务计划程序启动并调用了我的 SampleTask0 函数。下面是任务代码:
任务 1 的功能与任务 0 几乎相同,只是它打印不同的信息。这些代码可以编译,并且在我将二进制文件写入我的开发板后,SampleTask0 无法按预期工作。通过 USART3 发送字符的 DebugPrintf 函数只打印“Tas”,然后一切都停止。我用gdb跟踪代码并逐步执行代码,打印了“Task 0 running”,但是当它返回到任务函数时(在“while(delay){delay--;}”之前)发生错误:
无法访问地址 0xa5a5a5a5 的内存
在 main.c 中的 SampleTask0 (pvParameters=0x0)...
根据 FreeRTOS文档,每个任务的堆栈在创建时填充 0xa5 字节。我认为堆栈可能有问题。我已将 configCHECK_FOR_STACK_OVERFLOW 设置为 2 以启用堆栈溢出检测,但发生这种情况时尚未调用我的钩子函数。
CORTEX_M4F_STM32F407ZG-SK 中的 startup_stm32f4xx.s 是为 EWARM 工具链创建的,我将其替换为我从 ST 网站下载的 STM32F4-Discovery_FW_V1.1.0 中的启动文件。所以它可能会破坏堆栈,但我不确定这一点。有人对此有想法吗?
c - C线程中的自增是安全的吗?
我在 FreeRTOS (FreeRTOSV7.4.0\FreeRTOS\Source\tasks.c) 中找到了一些代码:
明确表示不需要保护,因为类型是“portBASE_TYPE”,它是“长”类型。我的理解是它假设这种类型的自增是原子的。但是在我拆开它之后我找不到任何证据,它是一个简单的加载->添加->存储。那么有问题吗?
operating-system - 循环调度中的任务行为不正确
我在 STM32F4DISCOVERY 板上运行 FreeRTOS,并且我有以下代码:
其中 vTask1 是这个函数:
vTask2 具有几乎相同的代码:
当我运行程序时,我看到 LED0 和 LED3 一直亮着(它们的切换对我的眼睛来说太快了,这很好),并且“共享资源”的 LED2 闪烁得非常快。问题是这样的:当我颠倒xTaskCreate
调用顺序时,我会遇到相同的情况,但 LED2 的闪烁行为不同,速度要慢得多。为什么会发生这种情况,因为任务应该具有相同的优先级并因此遵循循环调度?他们不应该得到相同的时间吗?为什么仅在以不同的顺序创建它们之后它们的行为会发生变化?
提前致谢。