标签: freertos

stm32l4 RTC HAL无法正常工作

我在带有FreeRTOS的stm32L476上的RTC上有一个奇怪的行为。

它仅在RUN模式下第一次读取,RTC正在工作,因为从运行到运行,它保存了内部寄存器的值并且一直在上升。

另外,如果我在583行的stm32l4xx_hal_rtc.c处放置断点时进行调试,则:

tmpreg = (uint32_t)(hrtc->Instance->TR & RTC_TR_RESERVED_MASK);    
*breakpoint* sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
Run Code Online (Sandbox Code Playgroud)

我可以看到tmpreg和TR寄存器如何更新,然后单击跳转到下一个断点时,显示的内容也相同。

那么,为什么在正常运行时它不起作用?

初始化代码(生成多维数据集MX):

void MX_RTC_Init(void)
{
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;

    /**Initialize RTC Only 
    */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initialize RTC and set the Time and Date 
    */
  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
  sTime.Hours = 0; …
Run Code Online (Sandbox Code Playgroud)

c hal stm32 freertos real-time-clock

4
推荐指数
2
解决办法
4694
查看次数

FreeRTOS 配置TICK_RATE_HZ

我使用的是带有 5.4 版 FreeRTOS 的 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 every 1 second.
}
Run Code Online (Sandbox Code Playgroud)

当我将 configtick_rate_hz 设置为 1000 …

c rtos msp430 iar freertos

3
推荐指数
1
解决办法
1万
查看次数

为x86构建FreeRTOS

我在网上看到,可以在Windows上为外部设备构建FreeRTOS.你能在ubuntu上为x86构建吗?

谢谢

ubuntu x86 operating-system freertos

3
推荐指数
2
解决办法
7602
查看次数

如何在使用FreeRTOS时保持代码的可移植性

我很想知道如何在我的应用程序中使用FreeRTOS.让我提出一个简单的方案.假设我有main和一个具有一些硬件特定代码的模块.该代码可用于控制系统或传感器中的特定电机......具有定义角色的任何硬件.在module.c中,我有一个名为的函数ModuleNameTask.在main我创建任务使用xTaskCreate,我通过ModuleNameTask.由于我ModuleNameTask是在module.c而不是main.c中定义的,所以我现在必须在module.c中包含一些FreeRTOS,以便使用类似的函数vTaskDelay.我不喜欢我在module.c中包含这些文件的事实,因为我觉得它不再可移植.

那么,我该如何处理呢?我应该ModuleNameTask从module.c中删除它并将其放在main.c中吗?或者只是接受我必须将FreeRTOS的位包含到module.c中的事实.有什么建议?

c embedded portability freertos

3
推荐指数
2
解决办法
1478
查看次数

FreeRTOS 匈牙利表示法

我是 RTOS 和 C 编程的新手,而且我仍在习惯 C 的良好实践。因此,我打开了一个使用 FreeRTOS 的项目,我注意到操作系统文件使用匈牙利表示法。我知道一点符号,但在文件中遇到了一些新的“标准” FreeRTOS.h,它们是:

#ifndef configASSERT
    #define configASSERT( x )
    #define configASSERT_DEFINED 0
#else
    #define configASSERT_DEFINED 1
#endif
Run Code Online (Sandbox Code Playgroud)

在那之下,

#ifndef INCLUDE_xTaskGetSchedulerState
    #define INCLUDE_xTaskGetSchedulerState 0
#endif

#ifndef INCLUDE_xTaskGetCurrentTaskHandle
    #define INCLUDE_xTaskGetCurrentTaskHandle 0
#endif
Run Code Online (Sandbox Code Playgroud)

我到处都看到过这个x - 就像x TaskGetCurrentTaskHandle一样。此外,vpd和类似的变量名称,如728相关标题行中所示:

#if configENABLE_BACKWARD_COMPATIBILITY == 1
    #define eTaskStateGet eTaskGetState
    #define portTickType TickType_t
    #define xTaskHandle TaskHandle_t
    #define xQueueHandle QueueHandle_t
    #define xSemaphoreHandle SemaphoreHandle_t
    #define xQueueSetHandle QueueSetHandle_t
    #define xQueueSetMemberHandle QueueSetMemberHandle_t
    #define xTimeOutType TimeOut_t
    #define …
Run Code Online (Sandbox Code Playgroud)

c embedded hungarian-notation freertos

3
推荐指数
1
解决办法
1116
查看次数

FreeRtos 或 TI rtos 中堆栈大小的计算

最近,我正在使用 FreeRTOS 并创建了一些任务来执行我所需的操作。尽管似乎每次我使用xTaskCreate()TI GUI 配置创建新任务时,我只是尝试将堆栈大小保持为所需的大小,以免堆栈溢出。

有没有办法计算我的任务针对以下事件使用的最大堆栈大小?

  1. 全局变量和局部变量使用的堆栈
  2. 函数最大递归次数所使用的栈
  3. 包括中断上下文切换

stack rtos freertos

3
推荐指数
1
解决办法
7035
查看次数

FreeRTOS 任务优先级和堆栈大小

我有 STM32F746ZG Nucleo-144pin 板并使用 STMCubeMx 生成代码。我选择了 CubeMx 提供的 10.0.0 版本的 FreeRTOS,工具链是 SW4STM32。

我做了两个任务,以下是我的功能。我的代码在这里:

void led1_task(void)
{
    while(1)
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
        HAL_Delay(1000);
    }
}

void led2_task(void)
{
    while(1)
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
        HAL_Delay(4100);
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 任务优先。

我发现如果两个任务具有相同的任务优先级,则这两个任务可以正常工作,但是如果它们的任务优先级不同,则低任务不起作用。

  xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL);  ==> Works fine.
  xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL);  ==> Works fine.

----------------------------------------------------------------------------

  xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL);  ==> This task is not working.
  xTaskCreate(led2_task, "led2_task", 1024, NULL, 3, NULL);  ==> Works fine.

Run Code Online (Sandbox Code Playgroud)
  1. 任务堆栈大小。

如果两个任务的堆栈大小加起来大于 3 KB,则确认任务未正常工作。下面的代码工作正常。

  xTaskCreate(led1_task, …
Run Code Online (Sandbox Code Playgroud)

stm32 freertos stm32f7 cubemx stm32cubemx

2
推荐指数
1
解决办法
3118
查看次数

如何在没有 win32 或 Linux 端口的笔记本电脑上安装 freeRTOS 以获得实时行为?

我正在开始使用 freeRTOS。我浏览了 freeRTOS.org 中提供的文档,并对一些演示项目进行了一些练习。我的问题是如何在不使用 win32 端口的情况下安装 freeRTOS(因为它只是一个不提供实时行为的模拟器)?是否可以将 freeRTOS 作为独立操作系统安装,或者是否需要使用 Linux 内核或 Windows?

freertos

2
推荐指数
1
解决办法
874
查看次数

RTOS TCB 与任务堆栈

我对任务的 TCB 和 RTOS 中的任务堆栈之间的差异有一点误解,TCB 不是已经携带了有关上下文切换的所有所需信息(例如寄存器值等)吗?

谢谢。

c embedded rtos freertos

2
推荐指数
1
解决办法
3368
查看次数

当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

我正在研究 freeRtos,并且我有一个名为 x 的变量。现在,每秒只有一个任务正在写入该变量,而其他任务正在读取该变量值。我需要用互斥锁来保护变量吗?

c embedded multithreading freertos esp32

2
推荐指数
1
解决办法
886
查看次数