色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)習(xí)記錄13 ucosII移植

          STM32學(xué)習(xí)記錄13 ucosII移植

          作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          關(guān)于如何移植,建立工程的問題已經(jīng)有很多文檔說明了,此處只是說明一下需要修改的文件及修改的原因。
          1:os_cpu.h
          我們需要對(duì)此文件進(jìn)行修改:
          1) void OS_CPU_PendSVHandler(void) 需替換成 void PendSV_Handler(void) 一般我們自己開發(fā)基于 stm32 芯片的軟件,都會(huì)使用標(biāo)準(zhǔn)外設(shè)庫 CMSIS 中提供的啟動(dòng)文件,比如 startup_stm32f10x_hd.s,而 Micrium 官方?jīng)]有用 ST 的標(biāo)準(zhǔn)啟動(dòng)文件,而且分開寫成了兩個(gè).s 文件,即 init.s 和 vectors.s
          (MicriumSoftwareEvalBoardsSTSTM3210B-EVALRVMDK) init.s 負(fù)責(zé)進(jìn)入 main(),vectors.s 設(shè)置中斷向量 由于 OS_CPU_PendSVHandler 這個(gè)中斷向量就是在 vectors.s 中被設(shè)置的,且我們使用的是startup_stm32f10x_hd.s 作為啟動(dòng)文件的,而在 startup_stm32f10x_hd.s 文件中,PendSV 的中斷向量名為 PendSV_Handler,所以只需用 PendSV_Handler 替換掉相應(yīng)文件的OS_CPU_PendSVHandler,其中函數(shù)聲明在 OS_CPU_C.h 中,具體的中斷服務(wù)函數(shù)原型在OS_CPU_A.ASM 中,后面也將對(duì)其進(jìn)行修改。 這樣子,替換后的 PendSV_Handler 函數(shù)在 OS_CPU_C.h 中有聲明,在 OS_CPU_A.ASM 中有具體的中斷服務(wù)函數(shù)代碼,與 startup_stm32f10x_hd.s 中的向量地址就對(duì)應(yīng)上了。
          2) 注釋掉最后三個(gè)關(guān)于 SysTick 服務(wù)函數(shù)
          void OS_CPU_SysTickHandler(void);
          void OS_CPU_SysTickInit(void);
          INT32U OS_CPU_SysTickClkFreq(void);
          其中,OS_CPU_SysTickHandler 函數(shù)在 ST 標(biāo)準(zhǔn)庫 stm32f10x_it.c 中已定義,此處不需要;
          其中,OS_CPU_SysTickInit 定義在 os_cpu_c.c 中,依賴于 OS_CPU_SysTickClkFreq,用于初始化 SysTick 定時(shí)器,需注釋掉;其中,OS_CPU_SysTickClkFreq 定義在官方 EvalBoards 的 BSP.c中,需解除依賴,若需要,我們可以在 bsp.c 中實(shí)現(xiàn)。
          2: stm32f10x_it.c
          由于1.2的原因,需要修改
          SysTick 作為 OS 的“心跳”,可稱為滴答時(shí)鐘,本質(zhì)上來說就是一個(gè)定時(shí)器,和 PendSV 中斷一樣,在 startup_stm32f10x_hd.s 中 SysTick 的中斷向量名為 SysTick_Handler,且因?yàn)?ST標(biāo)準(zhǔn)庫已經(jīng)有相關(guān)庫函數(shù),所以我們只需作如下修改:
          打開 os_cpu_c.c 文件,找到 void OS_CPU_SysTickHandler(void)的內(nèi)容代碼
          OS_CPU_SR cpu_sr;
          OS_ENTER_CRITICAL();
          OSIntNesting++;
          OS_EXIT_CRITICAL();
          OSTimeTick();
          OSIntExit();
          復(fù)制到 stm32f10x_it.c 文件中的 SysTick_Handler (void)函數(shù)內(nèi);
          void SysTick_Handler(void)
          {
          OS_CPU_SR cpu_sr;
          OS_ENTER_CRITICAL();
          OSIntNesting++;
          OS_EXIT_CRITICAL();
          OSTimeTick();
          OSIntExit();
          }
          并且在文件頭部添加:#include
          3:os_cup_a.asm
          由于1.1的原因,OS_CPU_PendSVHandler 中斷服務(wù)函數(shù)的原型在此文件中,我們需要用PendSV_Handler 將其替換,以實(shí)現(xiàn)在 startup_stm32f10x_hd.s 中的中斷向量的匹配。
          1) 注釋掉 EXPORT OS_CPU_PendSVHandler,并修改成 EXPORT PendSV_Handler,
          2) 找到 OS_CPU_PendSVHandler 程序原型,并重命名為 PendSV_Handler
          這樣 PendSV_Handler 中斷服務(wù)函數(shù)就成功建立了,同時(shí),我們需要注釋掉 stm32f10x_it.h 和stm32f10x_it.c 中的相關(guān) PendSV_Handler 的聲明和定義,以防止沖突。
          4:os_cpu_c.c
          由于1.2做一下修改:
          1) 把最后 OS_CPU_SysTickHandler(), OS_CPU_SysTickInit()這兩個(gè)函數(shù)的內(nèi)容代碼注釋掉;
          2) 禁用以下宏定義,因?yàn)樗麄兩婕暗缴弦徊阶⑨尩?Systick 服務(wù)函數(shù)
          #define OS_CPU_CM3_NVIC_ST_CTRL (*((volatile INT32U *)0xE000E010))
          #define OS_CPU_CM3_NVIC_ST_RELOAD (*((volatile INT32U *)0xE000E014))
          #define OS_CPU_CM3_NVIC_ST_CURRENT (*((volatile INT32U *)0xE000E018))
          #define OS_CPU_CM3_NVIC_ST_CAL (*((volatile INT32U *)0xE000E01C))
          #define OS_CPU_CM3_NVIC_ST_CTRL_COUNT 0x00010000
          #define OS_CPU_CM3_NVIC_ST_CTRL_CLK_SRC 0x00000004
          #define OS_CPU_CM3_NVIC_ST_CTRL_INTEN 0x00000002
          #define OS_CPU_CM3_NVIC_ST_CTRL_ENABLE 0x00000001
          5:os_cfg.h
          此文件為配置內(nèi)核的頭文件,在這個(gè)文件,我們可以禁用信號(hào)量、互斥信號(hào)量、郵箱、隊(duì)列、信號(hào)量集、定時(shí)器、內(nèi)存管理,調(diào)試模式:
          #define OS_FLAG_EN 0 //禁用信號(hào)量集
          #define OS_MBOX_EN 0 //禁用郵箱
          #define OS_MEM_EN 0 //禁用內(nèi)存管理
          #define OS_MUTEX_EN 0 //禁用互斥信號(hào)量
          #define OS_Q_EN 0 //禁用隊(duì)列
          #define OS_SEM_EN 0 //禁用信號(hào)量
          #define OS_TMR_EN 0 //禁用定時(shí)器
          #define OS_DEBUG_EN 0 //禁用調(diào)試
          也可以禁用應(yīng)用軟件的鉤子函數(shù)和多重事件控制
          #define OS_APP_HOOKS_EN 0
          #define OS_EVENT_MULTI_EN 0
          這些所做的修改主要是把一些功能給去掉,減少內(nèi)核大小,也利于編譯調(diào)試。等用到的時(shí)候,再開啟相應(yīng)的功能。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉