• uC/OS


    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录

    首先下载源码然后解压得到下面的文件:

    然后在模版工程里新建各种文件夹:

    最后全部都添加进工程:

    OK了,编译一下,惊呆了,竟然 0错误 0 警告

    然后修改下文件 startup_stm32f40xx.s

            DCD     DebugMon_Handler          ; Debug Monitor Handler
            DCD     0                         ; Reserved
            ;DCD     PendSV_Handler            ; PendSV Handler
            ;DCD     SysTick_Handler           ; SysTick Handler
            IMPORT  OS_CPU_PendSVHandler
            DCD     OS_CPU_PendSVHandler
            IMPORT  OS_CPU_SysTickHandler 
            DCD     OS_CPU_SysTickHandler
    

     OS_CFG.H

    #ifndef OS_CFG_H
    #define OS_CFG_H
    
    
                                                 /* ---------------------------- MISCELLANEOUS -------------------------- */
    #define OS_CFG_APP_HOOKS_EN             1u   /* Enable (1) or Disable (0) application specific hooks                  */
    #define OS_CFG_ARG_CHK_EN               1u   /* Enable (1) or Disable (0) argument checking                           */
    #define OS_CFG_CALLED_FROM_ISR_CHK_EN   1u   /* Enable (1) or Disable (0) check for called from ISR                   */
    #define OS_CFG_DBG_EN                   1u   /* Enable (1) debug code/variables                                       */
    #define OS_CFG_ISR_POST_DEFERRED_EN     0u   /* Enable (1) or Disable (0) Deferred ISR posts                          */
    #define OS_CFG_OBJ_TYPE_CHK_EN          1u   /* Enable (1) or Disable (0) object type checking                        */
    #define OS_CFG_TS_EN                    0u   /* Enable (1) or Disable (0) time stamping                               */
    
    #define OS_CFG_PEND_MULTI_EN            0u   /* Enable (1) or Disable (0) code generation for multi-pend feature      */
    
    #define OS_CFG_PRIO_MAX                64u   /* Defines the maximum number of task priorities (see OS_PRIO data type) */
    
    #define OS_CFG_SCHED_LOCK_TIME_MEAS_EN  0u   /* Include code to measure scheduler lock time                           */
    #define OS_CFG_SCHED_ROUND_ROBIN_EN     0u   /* Include code for Round-Robin scheduling                               */
    #define OS_CFG_STK_SIZE_MIN            64u   /* Minimum allowable task stack size                                     */
    
    
                                                 /* ----------------------------- EVENT FLAGS --------------------------- */
    #define OS_CFG_FLAG_EN                  1u   /* Enable (1) or Disable (0) code generation for EVENT FLAGS             */
    #define OS_CFG_FLAG_DEL_EN              1u   /*     Include code for OSFlagDel()                                      */
    #define OS_CFG_FLAG_MODE_CLR_EN         1u   /*     Include code for Wait on Clear EVENT FLAGS                        */
    #define OS_CFG_FLAG_PEND_ABORT_EN       1u   /*     Include code for OSFlagPendAbort()                                */
    
    
                                                 /* -------------------------- MEMORY MANAGEMENT ------------------------ */
    #define OS_CFG_MEM_EN                   1u   /* Enable (1) or Disable (0) code generation for MEMORY MANAGER          */
    
    
                                                 /* --------------------- MUTUAL EXCLUSION SEMAPHORES ------------------- */
    #define OS_CFG_MUTEX_EN                 1u   /* Enable (1) or Disable (0) code generation for MUTEX                   */
    #define OS_CFG_MUTEX_DEL_EN             1u   /*     Include code for OSMutexDel()                                     */
    #define OS_CFG_MUTEX_PEND_ABORT_EN      1u   /*     Include code for OSMutexPendAbort()                               */
    
    
                                                 /* --------------------------- MESSAGE QUEUES -------------------------- */
    #define OS_CFG_Q_EN                     1u   /* Enable (1) or Disable (0) code generation for QUEUES                  */
    #define OS_CFG_Q_DEL_EN                 1u   /*     Include code for OSQDel()                                         */
    #define OS_CFG_Q_FLUSH_EN               1u   /*     Include code for OSQFlush()                                       */
    #define OS_CFG_Q_PEND_ABORT_EN          1u   /*     Include code for OSQPendAbort()                                   */
    
    
                                                 /* ----------------------------- SEMAPHORES ---------------------------- */
    #define OS_CFG_SEM_EN                   1u   /* Enable (1) or Disable (0) code generation for SEMAPHORES              */
    #define OS_CFG_SEM_DEL_EN               1u   /*    Include code for OSSemDel()                                        */
    #define OS_CFG_SEM_PEND_ABORT_EN        1u   /*    Include code for OSSemPendAbort()                                  */
    #define OS_CFG_SEM_SET_EN               1u   /*    Include code for OSSemSet()                                        */
    
    
                                                 /* -------------------------- TASK MANAGEMENT -------------------------- */
    #define OS_CFG_STAT_TASK_EN             1u   /* Enable (1) or Disable(0) the statistics task                          */
    #define OS_CFG_STAT_TASK_STK_CHK_EN     1u   /* Check task stacks from statistic task                                 */
    
    #define OS_CFG_TASK_CHANGE_PRIO_EN      1u   /* Include code for OSTaskChangePrio()                                   */
    #define OS_CFG_TASK_DEL_EN              1u   /* Include code for OSTaskDel()                                          */
    #define OS_CFG_TASK_Q_EN                1u   /* Include code for OSTaskQXXXX()                                        */
    #define OS_CFG_TASK_Q_PEND_ABORT_EN     1u   /* Include code for OSTaskQPendAbort()                                   */
    #define OS_CFG_TASK_PROFILE_EN          1u   /* Include variables in OS_TCB for profiling                             */
    #define OS_CFG_TASK_REG_TBL_SIZE        1u   /* Number of task specific registers                                     */
    #define OS_CFG_TASK_SEM_PEND_ABORT_EN   1u   /* Include code for OSTaskSemPendAbort()                                 */
    #define OS_CFG_TASK_SUSPEND_EN          1u   /* Include code for OSTaskSuspend() and OSTaskResume()                   */
    
    
                                                 /* -------------------------- TIME MANAGEMENT -------------------------- */
    #define OS_CFG_TIME_DLY_HMSM_EN         1u   /*     Include code for OSTimeDlyHMSM()                                  */
    #define OS_CFG_TIME_DLY_RESUME_EN       1u   /*     Include code for OSTimeDlyResume()                                */
    
    
                                                 /* ------------------- TASK LOCAL STORAGE MANAGEMENT ------------------- */
    #define OS_CFG_TLS_TBL_SIZE             0u   /* Include code for Task Local Storage (TLS) registers                   */
    
    
                                                 /* ------------------------- TIMER MANAGEMENT -------------------------- */
    #define OS_CFG_TMR_EN                   1u   /* Enable (1) or Disable (0) code generation for TIMERS                  */
    #define OS_CFG_TMR_DEL_EN               1u   /* Enable (1) or Disable (0) code generation for OSTmrDel()              */
    
    #endif
    

    OS_CPU_A.ASM

    删除浮点功能先关函数

    ;删除FPU代码段 删除开始
    ;#ifdef __ARMVFP__
    ;    PUBLIC  OS_CPU_FP_Reg_Push
    ;    PUBLIC  OS_CPU_FP_Reg_Pop
    ;#endif
    
    ;********************************************************************************************************
    ;                                   FLOATING POINT REGISTERS PUSH
    ;                             void  OS_CPU_FP_Reg_Push (CPU_STK  *stkPtr)
    ;
    ; Note(s) : 1) This function saves S0-S31, and FPSCR registers of the Floating Point Unit.
    ;
    ;           2) Pseudo-code is:
    ;              a) Get FPSCR register value;
    ;              b) Push value on process stack;
    ;              c) Push remaining regs S0-S31 on process stack;
    ;              d) Update OSTCBCurPtr->StkPtr;
    ;********************************************************************************************************
    
    ;#ifdef __ARMVFP__
    ;OS_CPU_FP_Reg_Push
    ;    MRS     R1, PSP                                             ; PSP is process stack pointer
    ;    CBZ     R1, OS_CPU_FP_nosave                                ; Skip FP register save the first time
    
    ;    VMRS    R1, FPSCR
    ;    STR R1, [R0, #-4]!
    ;    VSTMDB  R0!, {S0-S31}
    ;    LDR     R1, =OSTCBCurPtr
    ;    LDR     R2, [R1]
    ;    STR     R0, [R2]
    ;OS_CPU_FP_nosave
    ;    BX      LR
    ;#endif
    
    
    ;********************************************************************************************************
    ;                                   FLOATING POINT REGISTERS POP
    ;                             void  OS_CPU_FP_Reg_Pop (CPU_STK  *stkPtr)
    ;
    ; Note(s) : 1) This function restores S0-S31, and FPSCR registers of the Floating Point Unit.
    ;
    ;           2) Pseudo-code is:
    ;              a) Restore regs S0-S31 of new process stack;
    ;              b) Restore FPSCR reg value
    ;              c) Update OSTCBHighRdyPtr->StkPtr pointer of new proces stack;
    ;********************************************************************************************************
    
    ;#ifdef __ARMVFP__
    ;OS_CPU_FP_Reg_Pop
    ;    VLDMIA  R0!, {S0-S31}
    ;    LDMIA   R0!, {R1}
    ;    VMSR    FPSCR, R1
    ;    LDR     R1, =OSTCBHighRdyPtr
    ;    LDR     R2, [R1]
    ;    STR     R0, [R2]
    ;    BX      LR
    ;#endif
    
    ; 删除结束
    

    注意这里没有使能时间戳功能,如果使能还要添加一些函数。

    接下来建立任务并测试下功能

  • 相关阅读:
    垃圾收集器
    垃圾收集算法
    JVM内存模型
    工厂方法模式
    类加载机制
    六大设计原则
    单例模式
    HFish开源蜜罐搭建
    利用metasploit复现永恒之蓝
    零信任网络初识
  • 原文地址:https://www.cnblogs.com/einstein-2014731/p/4630273.html
Copyright © 2020-2023  润新知