Tag: rtos

常用于RTOS的设计模式(VXworks)

任何人都可以帮我解决RTOS常用的设计模式吗? 在VXworks中,哪种模式更可取?

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 […]

multithreading嵌入式软件中的primefaces操作

我一直在用C开发基于RTOS的嵌入式软件,我遇到了几个线程共享资源访问的问题。 我有两个问题。 第一个是在状态机中设置和获取状态变量的值。 下面是StateMachine“object”的头文件: typedef enum{ STATE_01, STATE_02, STATE_03, STATE_04 }state_e; // state machine instance typedef struct{ state_e currState; }StateMachine; extern state_e GetState(StateMachine*); extern void SetState(StateMachine*, state_e); 访问方法的实现如下: state_e GetState(StateMachine *sm){ return sm->currState; } void SetState(StateMachine *sm, state_e state){ sm->currState = state; } 我的问题是我不确定是否应该使用互斥锁来控制对状态变量的访问。 我的意思是在32位MCU上读取和写入32位变量是primefaces操作。 第二个问题涉及读取包含无符号32位整数的数组的一个项的值,其中每个位存储一位变量的值。 在这里,我不确定是否有必要使用互斥锁。 出于与上述相同的原因,我认为没有,但我想听一些更有经验的程序员的意见。 位数组“对象”的关联头文件: typedef struct{ uint32_t BitsArray[NO_WORDS]; }BitsArray; extern […]

从freeRTOS运行应用程序

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