Quieeeet 2023-03-16 14:10 采纳率: 0%
浏览 95
已结题

HC32F030F8TA移植FreeRTOS后LED常亮 不能正常闪烁

#HC32F030F8TA移植FreeRTOS后LED常亮 不能正常闪烁
#keil环境 编译烧录 通过
#不清楚具体是否和中断向量或者FreeRTOS配置的RAM有关
以下整个项目的工程文件:

https://t.wss.ink/f/aqkyefq3w5f  复制链接到浏览器打开

img

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

#include "hc32f030.h" 
/* Ensure stdint is only used by the compiler, and not the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
    #include <stdint.h>
    extern uint32_t SystemCoreClock;
#endif

 
#define configUSE_PREEMPTION                1//抢占式调度器开关
#define configUSE_IDLE_HOOK                 0//空闲任务钩子函数
#define configUSE_TICK_HOOK                 0//时间片钩子函数
#define configCPU_CLOCK_HZ                  ( SystemCoreClock )//CPU主频
#define configTICK_RATE_HZ                  ( ( TickType_t ) 1000 )//RTOS节拍频率 即1秒的中断次数
#define configMAX_PRIORITIES                ( 5 )//可使用的最大优先级
#define configMINIMAL_STACK_SIZE            ( ( unsigned short ) 64 )//定义空闲任务使用的堆栈大小
#define configTOTAL_HEAP_SIZE               ( ( size_t ) ( 6*1024 ) )//RTOS内核总计可用的有效的RAM大小
#define configMAX_TASK_NAME_LEN             ( 12 )//任务名最大长度
#define configUSE_TRACE_FACILITY            0//是否启动可视化跟踪调试
#define configUSE_16_BIT_TICKS              0//系统节拍计数器的变量类型  0为32位 1为16为
#define configIDLE_SHOULD_YIELD             1//空闲任务放弃CPU使用权给其他同优先级的用户任务
#define configUSE_MUTEXES                   1//是否使用互斥信号量
#define configQUEUE_REGISTRY_SIZE           8//设置可以注册的信号量和消息队列个数
#define configCHECK_FOR_STACK_OVERFLOW      0//堆栈溢出检查 大于0有效
#define configUSE_RECURSIVE_MUTEXES         1//是否使用递归互斥信号量
#define configUSE_MALLOC_FAILED_HOOK        0//内存申请失败钩子函数
#define configUSE_APPLICATION_TASK_TAG      0//为任务分配标签
#define configUSE_COUNTING_SEMAPHORES       1//是否使用计数信号量
#define configGENERATE_RUN_TIME_STATS       0//是否启用运行时间统计功能
 
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES               0//启用协程,启用协程以后必须添加文件croutine.c
#define configMAX_CO_ROUTINE_PRIORITIES     ( 2 )//协程的有效优先级数目
 
/* Software timer definitions. */
#define configUSE_TIMERS                    0//是否启用软件定时器
#define configTIMER_TASK_PRIORITY           ( 2 )//软件定时器优先级
#define configTIMER_QUEUE_LENGTH            ( 5 )//软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH        ( 80 )//软件定时器任务堆栈大小
 
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. *///是否启用RTOS API函数
#define INCLUDE_vTaskPrioritySet            1
#define INCLUDE_uxTaskPriorityGet           1
#define INCLUDE_vTaskDelete                 1
#define INCLUDE_vTaskCleanUpResources       1
#define INCLUDE_vTaskSuspend                1
#define INCLUDE_vTaskDelayUntil             1
#define INCLUDE_vTaskDelay                  1
 
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
#define configASSERT( x ) if( ( x ) == 0 )  { taskDISABLE_INTERRUPTS(); for( ;; ); }
 
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names - or at least those used in the unmodified vector table. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler



#endif /* FREERTOS_CONFIG_H */

  • 写回答

4条回答 默认 最新

  • 追cium 2023-03-16 14:36
    关注

    参考GPT和自己的思路:

    根据你提供的信息,LED常亮不能正常闪烁可能是因为存在以下几个原因:

    1.任务优先级设置不合理,导致任务无法按照预期的顺序执行。建议检查任务的优先级设置,并确保优先级较高的任务不会一直占用CPU资源。

    2.堆栈大小设置不合理,导致堆栈溢出。建议增加堆栈大小并重新编译程序。

    3.中断服务函数写错或者配置不正确,建议检查中断服务函数的实现,并确保中断服务函数与中断向量表的配置一致。

    4.FreeRTOS内存配置有误,建议检查FreeRTOS配置文件中关于内存的设置,并根据RAM的实际情况进行调整。

    建议你检查以上四个方面的问题,一一排查,直到解决问题为止。同时,可以使用调试工具来辅助定位问题,例如通过逐步执行代码、查看变量值、查看堆栈和任务状态等方式来帮助排除故障。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月23日
  • 修改了问题 3月16日
  • 赞助了问题酬金15元 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效