vTaskStartScheduler 无法在带有 FreeRTOS 的 Keil uVision 5 中工作

问题描述 投票:0回答:1

我第一次使用 Keil uVision 和 freeRTOS,但我不知道为什么一旦将代码加载到我的板(Nucleo-F302R8)它就无法工作。

我正在使用以下内容,为了测试,我只是试图让两个 LED 闪烁,并且我试图使其保持独立(不使用 Cube)。寻找解决方案我发现有些人失踪了

    /* Map the FreeRTOS port interrupt handlers to their CMSIS standard names. */ #define xPortPendSVHandler                    PendSV_Handler #define vPortSVCHandler                       SVC_Handler #define xPortSysTickHandler                   SysTick_Handler

但就我而言,这已经包含在内,而且我还发现我需要将 #define configUSE_TIMERS 从 0 更改为 1。


#include "stm32f3xx.h"
#include "FreeRTOS.h"
#include "task.h"

const TickType_t xDelay = 500 / portTICK_PERIOD_MS;

void vLED1Task(void *pvParameters);
void vLED2Task(void *pvParameters);



void vLED1Task(void *pvParameters)
{
   

     while(1)
     {
        GPIOB->BSRR = GPIO_BSRR_BS_13;

        vTaskDelay(pdMS_TO_TICKS(500));

        GPIOB->BSRR = GPIO_BSRR_BR_13;

        vTaskDelay(xDelay);

    }
}

void vLED2Task(void *pvParameters)
{
    

     while(1)
     {
        GPIOB->BSRR = GPIO_BSRR_BS_14;

        vTaskDelay(xDelay);

        GPIOB->BSRR = GPIO_BSRR_BR_14;

        vTaskDelay(xDelay);


            
    }
}

int main(void)
{
 RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
 GPIOB->MODER |= GPIO_MODER_MODER13_0;
 GPIOB->MODER |= GPIO_MODER_MODER14_0;

 xTaskCreate(vLED1Task, "LED1Task", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
 xTaskCreate(vLED2Task, (const portCHAR *)"LED2_Task", configMINIMAL_STACK_SIZE, NULL, 1, NULL);

 vTaskStartScheduler();  
    
  
}
c stm32 freertos keil nucleo
1个回答
0
投票

您是否尝试过使用调试器单步执行它?您还说您没有使用立方体生成的代码,我假设您指的是CubeMX? 如果是这样,请记住 freeRTOS 应该使用 SysTick 时基源,而且如果您不使用生成的代码,您仍然需要定义一些东西。请提供一些详细信息来解决您的问题

© www.soinside.com 2019 - 2024. All rights reserved.