zoukankan      html  css  js  c++  java
  • FREERTOS移植(MDK 、STM32F103)

    一、文件的拷贝

    需要添加: 内核源码源文件、portable源文件、内存管理heap源文件、FreeRTOSConfig.h 。在图示路径,FreeRTOSConfig.h如果官方Demo里面的比较旧可以找一些开发板的来用,要同系列。

    项目中新增FREERTOS文件夹添加:内核源码源文件(crotine.c     event_group.c       list.c      queue.c task.c     tasks.c     timers.c)

                新增PORT文件夹添加:portable源文件、内存管理heap源文件(port.c    portmacro.h  heap_4.c)//heap_1等其他heap暂不使用,不明区别。

                FreeRTOSConfig.h添加至main.c所在目录就行

    需要修改:FreeRTOSConfig.h

     二、FreeRTOSConfig.h的修改

    FreeRTOSConfig.h需要从上图对应芯片demo拷贝到项目文件夹

    主要修改的地方:

    #define configCPU_CLOCK_HZ            ( ( unsigned long ) 72000000 ) //最终的系统时钟,根据实际配置多少即多少,需要了解stm32的时钟配置https://www.cnblogs.com/ycpkbql/p/9106108.html

    #define configTICK_RATE_HZ            ( ( TickType_t ) 1000 ) //RTOS的节奏,根据这个节拍,切换到不同的任务,这里是1ms检查一次任务列表,通常可以配置为100,即10ms,这个也和vTaskDelay直接相关。

    #define configTOTAL_HEAP_SIZE        ( ( size_t ) ( 17 * 1024 ) ) //freertos能操控的内存大小,只要不崩溃,越接近sram大小越好,留出10K左右给初始化,全局变量等使用

    #define configMAX_SYSCALL_INTERRUPT_PRIORITY     0x5f /* equivalent to 0xb0, or priority 11. */ //

    以下可选:

    /***************************************************************************************************************/
    /*                                FreeRTOS timers                                          */需要使用RTOS定时器
    /***************************************************************************************************************/
    #define configUSE_TIMERS                        1                               
    #define configTIMER_TASK_PRIORITY                (configMAX_PRIORITIES-1)        
    #define configTIMER_QUEUE_LENGTH                5                               
    #define configTIMER_TASK_STACK_DEPTH            (configMINIMAL_STACK_SIZE*2)   
    /***************************************************************************************************************/
    /*                                FreeRTOS event group                                          */需要使用RTOS事件组
    /***************************************************************************************************************/

    #define INCLUDE_xEventGroupSetBitFromISR 1
    #define configUSE_TIMERS 1
    #define INCLUDE_xTimerPendFunctionCall 1
    /***************************************************************************************************************/
    /*                                FreeRTOS debug                                          */需要使用RTOS 调试,需要调用获取栈深API
    /***************************************************************************************************************/

    #define INCLUDE_uxTaskGetStackHighWaterMark 0
    #endif /* FREERTOS_CONFIG_H */

    三、优先级配置

    不要忘记优先级必须配置成如下选项

    void NVIC_Configuration(void)
    {
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //都是抢占优先级,没有响应优先级,配置中断的时候响应优先级都位0,抢占优先级0-15
    }

    1.抢占优先级高的中断   可以打断正在响应的   抢占优先级低的中断。

    2.抢占优先级相同的中断,只能等待上一个中断完成才能响应本中断。

    3.分配为NVIC_PriorityGroup_4,响应优先级没有作用。

  • 相关阅读:
    由button标签在 IE 8.0 下的异常表现引发的一场血案
    【javascript】—— JS判断浏览器类型、操作系统
    【javascrpt】——图片预览和上传,兼容IE 9-
    YII安装smarty-view-renderer扩展
    Yii中用递归方法实现无限级分类
    Yii中Ajax的使用,如收藏功能
    Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)
    Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
    yii 中设置提示成功信息,错误提示信息,警告信息
    Yii Framework 开发教程Zii组件-Tabs示例
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/9104571.html
Copyright © 2011-2022 走看看