STM32F429中在freertos基础工程里增加sdram的功能后,对sdram初...

2019-12-10 18:05发布

用的是正点原子的阿波罗f429的开发板,sdram.c和sdram.h用的都是原子例程里的,工程用的是基于freertos的基础例程,freertos的mdk工程烧录进开发板是运行正常的,在main函数里对sdram进行初始化后就死机了进入了hardfault,请问有知道这是什么原因的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
dragonFANG
2019-12-11 18:33
  1. /***************************************************************************************************************/
  2. /*                                        FreeRTOS基础配置配置选项                                              */
  3. /***************************************************************************************************************/
  4. #define configUSE_PREEMPTION                                        1                       //1使用抢占式内核,0使用协程
  5. #define configUSE_TIME_SLICING                                        1                                                //1使能时间片调度(默认式使能的)
  6. #define configUSE_PORT_OPTIMISED_TASK_SELECTION        1                       //1启用特殊方法来选择下一个要运行的任务
  7.                                                                         //一般是硬件计算前导零指令,如果所使用的
  8.                                                                         //MCU没有这些硬件指令的话此宏应该设置为0!
  9. #define configUSE_TICKLESS_IDLE                                        0                       //1启用低功耗tickless模式
  10. #define configUSE_QUEUE_SETS                                        1                       //为1时启用队列
  11. #define configCPU_CLOCK_HZ                                                (180000000)             //CPU频率
  12. #define configTICK_RATE_HZ                                                (500)                  //时钟节拍频率,若这里设置为1000,周期就是1ms
  13. #define configMAX_PRIORITIES                                        (32)                    //可使用的最大优先级
  14. #define configMINIMAL_STACK_SIZE                                ((unsigned short)130)   //空闲任务使用的堆栈大小
  15. #define configMAX_TASK_NAME_LEN                                        (16)                    //任务名字字符串长度

  16. #define configUSE_16_BIT_TICKS                                        0                       //系统节拍计数器变量数据类型,
  17.                                                                         //1表示为16位无符号整形,0表示为32位无符号整形
  18. #define configIDLE_SHOULD_YIELD                                        1                       //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务
  19. #define configUSE_TASK_NOTIFICATIONS            1                       //为1时开启任务通知功能,默认开启
  20. #define configUSE_MUTEXES                                                1                       //为1时使用互斥信号量
  21. #define configQUEUE_REGISTRY_SIZE                                8                       //不为0时表示启用队列记录,具体的值是可以
  22.                                                                         //记录的队列和信号量最大数目。
  23. #define configCHECK_FOR_STACK_OVERFLOW                        0                       //大于0时启用堆栈溢出检测功能,如果使用此功能
  24.                                                                         //用户必须提供一个栈溢出钩子函数,如果使用的话
  25.                                                                         //此值可以为1或者2,因为有两种栈溢出检测方法。
  26. #define configUSE_RECURSIVE_MUTEXES                                1                       //为1时使用递归互斥信号量
  27. #define configUSE_MALLOC_FAILED_HOOK                        0                       //1使用内存申请失败钩子函数
  28. #define configUSE_APPLICATION_TASK_TAG                        0                       
  29. #define configUSE_COUNTING_SEMAPHORES                        1                       //为1时使用计数信号量

  30. /***************************************************************************************************************/
  31. /*                                FreeRTOS与内存申请有关配置选项                                                */
  32. /***************************************************************************************************************/
  33. #define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持动态内存申请
  34. #define configTOTAL_HEAP_SIZE                                        ((size_t)(30*1024))     //系统所有总的堆大小,单位Byte

  35. /***************************************************************************************************************/
  36. /*                                FreeRTOS与钩子函数有关的配置选项                                              */
  37. /***************************************************************************************************************/
  38. #define configUSE_IDLE_HOOK                                                0                       //1,使用空闲钩子;0,不使用
  39. #define configUSE_TICK_HOOK                                                0                       //1,使用时间片钩子;0,不使用

  40. /***************************************************************************************************************/
  41. /*                                FreeRTOS与运行时间和任务状态收集有关的配置选项                                 */
  42. /***************************************************************************************************************/
  43. #define configGENERATE_RUN_TIME_STATS                0                       //为1时启用运行时间统计功能
  44. #define configUSE_TRACE_FACILITY                                1                       //为1启用可视化跟踪调试
  45. #define configUSE_STATS_FORMATTING_FUNCTIONS        1                       //与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数
  46.                                                                         //prvWriteNameToBuffer(),vTaskList(),
  47.                                                                         //vTaskGetRunTimeStats()
  48.                                                                         
  49. /***************************************************************************************************************/
  50. /*                                FreeRTOS与协程有关的配置选项                                                  */
  51. /***************************************************************************************************************/
  52. #define configUSE_CO_ROUTINES                                 0                       //为1时启用协程,启用协程以后必须添加文件croutine.c
  53. #define configMAX_CO_ROUTINE_PRIORITIES         ( 2 )                   //协程的有效优先级数目

  54. /***************************************************************************************************************/
  55. /*                                FreeRTOS与软件定时器有关的配置选项                                            */
  56. /***************************************************************************************************************/
  57. #define configUSE_TIMERS                                        1                               //为1时启用软件定时器
  58. #define configTIMER_TASK_PRIORITY                        (configMAX_PRIORITIES-1)        //软件定时器优先级
  59. #define configTIMER_QUEUE_LENGTH                        5                               //软件定时器队列长度
  60. #define configTIMER_TASK_STACK_DEPTH                (configMINIMAL_STACK_SIZE*2)    //软件定时器任务堆栈大小

  61. /***************************************************************************************************************/
  62. /*                                FreeRTOS可选函数配置选项                                                      */
  63. /***************************************************************************************************************/
  64. #define INCLUDE_xTaskGetSchedulerState          1                       
  65. #define INCLUDE_vTaskPrioritySet                        1
  66. #define INCLUDE_uxTaskPriorityGet                        1
  67. #define INCLUDE_vTaskDelete                                        1
  68. #define INCLUDE_vTaskCleanUpResources                1
  69. #define INCLUDE_vTaskSuspend                                1
  70. #define INCLUDE_vTaskDelayUntil                                1
  71. #define INCLUDE_vTaskDelay                                        1
  72. #define INCLUDE_eTaskGetState                                1
  73. #define INCLUDE_xTimerPendFunctionCall                1
  74. #define INCLUDE_uxTaskGetStackHighWaterMark     1

  75. /***************************************************************************************************************/
  76. /*                                FreeRTOS与中断有关的配置选项                                                  */
  77. /***************************************************************************************************************/
  78. #ifdef __NVIC_PRIO_BITS
  79.         #define configPRIO_BITS                       __NVIC_PRIO_BITS
  80. #else
  81.         #define configPRIO_BITS                       4                  
  82. #endif

  83. /*中断最低优先级,用来配置systick和pendsv中断优先级*/
  84. #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY                        15  
  85. /*系统可管理的最高中断优先级,可在优先级为5到15的中断里面调用FreeRTOS的API*/
  86. #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY        5  
  87. /*内核优先级数值为configLIBRARY_LOWEST_INTERRUPT_PRIORITY左移4位得到*/
  88. #define configKERNEL_INTERRUPT_PRIORITY                 ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
  89. /*调用FreeRTOS关中断后,所有优先级数值大于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断都会被关闭,优先级数值小于不会被关闭*/
  90. #define configMAX_SYSCALL_INTERRUPT_PRIORITY         ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

  91. /***************************************************************************************************************/
  92. /*                                FreeRTOS与中断服务函数有关的配置选项                                          */
  93. /***************************************************************************************************************/
  94. #define xPortPendSVHandler         PendSV_Handler
  95. #define vPortSVCHandler         SVC_Handler
  96. #define xPortSysTickHandler SysTick_Handler

  97. #endif /* FREERTOS_CONFIG_H */
复制代码

会不会跟FREERTOS的配置有关,上面是我的配置

一周热门 更多>