Tag: freertos

FreeRTOS configTICK_RATE_HZ

我使用的是FreeRTOS版本5.4的MSP430f5438。 我有一个我无法弄清楚的有趣问题。 基本上,当我将configTICK_RATE_HZ设置为不同的值时,LED会更快或更慢地闪烁; 它应该保持相同的速度。 它设置的configTICK_RATE_HZ越高,闪烁越慢,当我将TICK_RATE设置得越低时,速度越快。 vTaskDelayUntil(&xLastFlashTime,xFlashRate); 无论configTICK_RATE_HZ是什么,LED都应该每秒闪烁一次。 我介入并检查了xFlashRate以确定。 它总是=到configTICK_RATE_HZ。 码: xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals /* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/ xLastFlashTime = xTaskGetTickCount(); for(;;) { vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED ); flashled();//this should happen […]

从freeRTOS运行应用程序

我目前正在开发我公司正在开发的消费电子产品的操作系统。 我已经决定将freeRTOS作为我们操作系统的主干,并且正在努力在操作系统中实现硬件function。 但是,我遇到了一个关于在freeRTOS中运行第三方应用程序的问题。 最初我认为任务是一个应用程序,基本上你有“myapplication.c”和“myapplication.h”包含所有应用程序必需的函数,代码将驻留在任务中的for(;;)循环中(作为一个主要的while循环)。 然后,当用户决定运行该应用程序时,会将一个函数指针传递给队列,然后我的app_launcher任务会使用第三方任务或应用程序创建新任务。 然而,这种方法的问题是操作系统已经被编译并驻留在微控制器上,并且可以根据用户的需要安装和删除应用程序……显然,应用程序需要从操作系统进行编译和执行。 在标准的unix机器上,我会使用fork之类的东西来选择可执行文件并给它自己的进程。 但是我在freeRTOS中找不到类似的function..我的另一个想法是接近应用程序开发的脚本语言,但我不知道如何启动这些应用程序…… 所以问题是,我如何让freeRTOS从尚未融入操作系统的第三方开发人员那里运行应用程序?

嵌入式系统的小型libc

我正在寻找一个用于嵌入式使用ARM7微控制器上的freertos的小型libc。 我看过newlib,但它对我的需求来说太复杂了。 Newlib在许多函数(例如printf())中调用malloc(),这对小型嵌入式实时系统不利。 有谁知道一个适合我的应用程序的小型,可移植的开源libc实现?

哪些变量类型/大小在STM32微控制器上是primefaces的?

以下是STM32微控制器上的数据类型: http : //www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm 。 这些微控制器使用32位ARM核心处理器。 哪些数据类型具有自动primefaces读取和primefaces写入访问权限? 我很确定所有32位数据类型都有(因为处理器是32位),并且所有64位数据类型都不行(因为读取或写入64位字需要至少2个处理器操作),但是bool (1字节)和uint16_t / int16_t (2字节)怎么样? 上下文:我在STM32上的多个线程(单核,multithreading,或称为FreeRTOS中的 “任务”)之间共享变量,需要知道是否需要通过关闭中断来强制执行primefaces访问,互斥体等 更新: 请参阅此示例代码: volatile bool shared_bool; volatile uint8_t shared u8; volatile uint16_t shared_u16; volatile uint32_t shared_u32; volatile uint64_t shared_u64; volatile float shared_f; // 32-bits volatile double shared_d; // 64-bits // Task (thread) 1 while (1) { // Write to the values in […]

GCC别名在翻译单元-AKA-之外运行,这甚至是适合这项工作的工具吗?

我正在使用STR32(Cortex-M3)上的FreeRTOS,并使用ST的CMSIS库来引导所有内容。 CMSIS库在启动“.s”文件中定义弱符号SVC_Handler 。 必须在某处重写它才能将ISR置于中断向量表中。 FreeRTOS定义了vPortSVCHandler ,这是我想要处理SVC中断的ISR。 我想使用我的应用程序代码(即没有修改FreeRTOS或CMSIS源代码)将两者“粘合”在一起。 我认为别名是工作的正确工具,所以我尝试了这个(在一个单独的源文件main.c中): void SVC_Handler(void) __attribute__ ((alias (“vPortSVCHandler”))); 这导致: error: ‘SVC_Handler’ aliased to undefined symbol ‘vPortSVCHandler’ 事实certificate,根据GCC文档http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html ,为了使用alias属性,您不能在翻译单元之外别名。 所以我想我会尝试将符号extern到main.c中,如下所示: extern void vPortSVCHandler( void ) __attribute__ (( naked )); void SVC_Handler(void) __attribute__ ((alias (“vPortSVCHandler”))); 这会产生相同的错误。 有什么建议??? 我真的想避免修改任何一个库。 我知道我可以编写一个简单调用vPortSVCHandler的函数SVC_Handler ,但这可能vPortSVCHandler ISR增加不必要的开销(可能取决于优化设置)。 注意:FreeRTOS示例通过自定义启动文件实现此目的。 我正在寻找一种方法来从C 或我的链接器脚本执行此操作。 编译器版本:gcc版本4.5.2(Sourcery G ++ Lite 2011.03-42) 目标:arm-none-eabi