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