99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UCOS2_STM32F1移植詳細(xì)過(guò)程 (三)

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-04-07 11:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ、概述

上一篇文章是講述ST芯片相關(guān)的配置和OS裁剪相關(guān)的配置,接著上一篇文章來(lái)講述關(guān)于UCOS的移植,該文主要針對(duì)uC/OS-II Ports下面os_cpu_a.asm、os_cpu_c.c和os_cpu.h文件底層端口代碼來(lái)講述。

請(qǐng)下載“UCOS2_STM32F1_3個(gè)簡(jiǎn)單任務(wù)”作為參考工程。

筆者將“UCOS移植詳細(xì)過(guò)程”分為多篇文章來(lái)講述,敬請(qǐng)關(guān)注。

Ⅱ、下載(請(qǐng)到我博客下載)

筆者將F0、F1、F3、F4移植到最新UCOS2.92上。移植好的、獨(dú)立的4個(gè)工程供大家下載學(xué)習(xí)、研究。建立的任務(wù)都是一樣的,只是針對(duì)芯片不同,Ports目錄下相關(guān)的源代碼有差異、標(biāo)準(zhǔn)外設(shè)庫(kù)也存在差異。每一個(gè)系列針對(duì)不同型號(hào)芯片只需要適當(dāng)改一下“型號(hào)”就行了。

提供下載的軟件工程都是在板子上運(yùn)行,保證沒(méi)問(wèn)題才上傳至360云盤(pán)。

UCOS基于STM32F0系列實(shí)例:

https://yunpan.cn/cRCZrQ3dzeVQq訪問(wèn)密碼 e73f

UCOS基于STM32F1系列實(shí)例:

https://yunpan.cn/cRCZxGFsqHa6Q訪問(wèn)密碼 39ff

UCOS基于STM32F3系列實(shí)例:

https://yunpan.cn/cRCZqPRCWs8UW訪問(wèn)密碼 b305

UCOS基于STM32F4系列實(shí)例:

https://yunpan.cn/cRCZPqbFqXSPR訪問(wèn)密碼 f177

UCOS源代碼工程

官網(wǎng)下載(需要賬號(hào)):

https://www.micrium.com/downloadcenter/download-results/?searchterm=hm-stmicroelectronics&supported=true

360云盤(pán)下載(定期更新至最新):

https://yunpan.cn/cRzcf8eSacEhE訪問(wèn)密碼 1235

ST標(biāo)準(zhǔn)外設(shè)庫(kù)

官網(wǎng)下載(需要賬號(hào)):

http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

360云盤(pán)下載(定期更新至最新):

https://yunpan.cn/cSaCpGejMSfr8訪問(wèn)密碼 60ae

參考資料:

https://yunpan.cn/cRCdSt73GwT6j訪問(wèn)密碼 499e

Ⅲ、工程目錄結(jié)構(gòu)說(shuō)明

文件結(jié)構(gòu)和工程目錄結(jié)構(gòu)對(duì)應(yīng)關(guān)系如上圖所示。


第一類(lèi)(標(biāo)準(zhǔn)外設(shè)庫(kù)):

Startup Code:?jiǎn)?dòng)代碼

STM32F10x_StdPeriph_Driver:標(biāo)準(zhǔn)外設(shè)庫(kù)庫(kù)驅(qū)動(dòng)

CMSIS:標(biāo)準(zhǔn)接口

第二類(lèi)(μC/OS-II實(shí)時(shí)內(nèi)核):

uC/OS-II Source:內(nèi)核源代碼(與處理器無(wú)關(guān))

uC/OS-II Ports:OS端口底層代碼(與處理器、編譯平臺(tái)有關(guān))

第三類(lèi)(用戶(hù)應(yīng)用):

Bsp:應(yīng)用底層代碼(初始化、驅(qū)動(dòng)等)

App:應(yīng)用實(shí)現(xiàn)代碼(配置OS、應(yīng)用等)

該文主要針對(duì)uC/OS-II Ports進(jìn)行移植描述。我們不使用UCOS自帶的調(diào)試功能,這里就不再描述(使用)os_dbg.c文件。

Ⅳ、配置os_cpu_a.asm文件

os_cpu_a.asm文件位于工程uC/OS-II Ports結(jié)構(gòu)下面,主要是系統(tǒng)底層相關(guān)的一部分匯編代碼。

該文件主要對(duì)外部引用(全局變量、函數(shù))做了一個(gè)申明,及部分系統(tǒng)相關(guān)源代碼(匯編)做了一個(gè)定義。

下面我將定義的幾個(gè)源代碼做一個(gè)描述,移植過(guò)程需要修改的我會(huì)重點(diǎn)提示出來(lái)。

1.全局申明


該文件開(kāi)頭對(duì)全局變量和函數(shù)進(jìn)行了一次聲明,只是使用的匯編,就如C語(yǔ)言里面的extern。

上面部分是外部(其他源文件)定義的變量和函數(shù),下面部分是申明本文件定義的函數(shù),下面我會(huì)對(duì)這定義的源代碼進(jìn)行講述。

將OS_CPU_PendSVHandler改為PendSV_Handler,為了兼容ST標(biāo)準(zhǔn)外設(shè)庫(kù)啟動(dòng)代碼(startup_stm32f10x_hd.s)。

2.NVIC配置


這部分是對(duì)NVIC(中斷控制)寄存器相關(guān)進(jìn)行定義,就如預(yù)處理中宏定義一樣,對(duì)寄存器地址,狀態(tài)進(jìn)行定義。

3.代碼生成指令


這幾條指令主要是針對(duì)匯編指令的一個(gè)處理。

4.狀態(tài)保存與恢復(fù)


這兩個(gè)匯編函數(shù)是程序運(yùn)行在臨界區(qū),對(duì)數(shù)據(jù)的保存和恢復(fù)的函數(shù)。主要作用就是保護(hù)數(shù)據(jù)不被破壞。

5.運(yùn)行最高優(yōu)先級(jí)任務(wù)


這個(gè)函數(shù)在任務(wù)切換的時(shí)候調(diào)用,知道任務(wù)切換原來(lái)的朋友來(lái)說(shuō)這里不難理解。UCOS是按優(yōu)先級(jí)來(lái)執(zhí)行任務(wù),優(yōu)先級(jí)越高(優(yōu)先級(jí)數(shù)值越?。?,越容易被執(zhí)行。當(dāng)執(zhí)行的任務(wù)處于掛起(或刪除)時(shí),系統(tǒng)就需要進(jìn)行任務(wù)切換,切換的規(guī)則就是切換到最高優(yōu)先級(jí)去執(zhí)行。

6.上下文切換


系統(tǒng)切換任務(wù)可以從兩個(gè)地方,也就是從任務(wù)級(jí)和中斷級(jí)。這兩個(gè)函數(shù)的意思都一樣,當(dāng)需要執(zhí)行任務(wù)切換時(shí),根據(jù)條件執(zhí)行某一個(gè)。

7.PendSV_Handler中斷


PendSV_Handler中斷函數(shù)定義于這里,主要是在執(zhí)行該中斷對(duì)M3內(nèi)核寄存器進(jìn)行一些操作(保存與修改)。

將OS_CPU_PendSVHandler改為PendSV_Handler,為了兼容ST標(biāo)準(zhǔn)外設(shè)庫(kù)啟動(dòng)代碼(startup_stm32f10x_hd.s)。

8.總結(jié)os_cpu_a.asm

對(duì)于UCOS的移植,os_cpu_a.asm文件主要就是修改OS_CPU_PendSVHandler的名稱(chēng),包含申明時(shí)的名稱(chēng)和定義源代碼時(shí)的名稱(chēng),其他源代碼保持不變。

Ⅴ、配置os_cpu_c.c文件

os_cpu_c.c文件位于工程uC/OS-II Ports結(jié)構(gòu)下面,主要是系統(tǒng)底層相關(guān)的一部分C語(yǔ)言接口代碼。

該文件有許多HOOK函數(shù),也就是所謂的鉤子函數(shù),主要用于系統(tǒng)初始化、與任務(wù)相關(guān)等,如:系統(tǒng)初始化時(shí)OSInitHookBegin()、OSInitHookEnd(); 創(chuàng)建任務(wù)時(shí)OSTaskCreateHook等。其實(shí)我們自己移植,有很多HOOK函數(shù)是不需要使用,或者不用去實(shí)現(xiàn)函數(shù)體里面的代碼。下面我將講述幾個(gè)重要的函數(shù),有些不重要的HOOK函數(shù)不再講述。

下面我將定義的幾個(gè)源代碼做一個(gè)描述,移植過(guò)程需要修改的我會(huì)重點(diǎn)提示出來(lái)。

1.系統(tǒng)滴答


這些都是關(guān)于SysTick系統(tǒng)滴答的宏定義和函數(shù)體,由于我們使用M3標(biāo)準(zhǔn)(ST庫(kù)里面有)的SysTick系統(tǒng)滴答函數(shù)接口,我們屏蔽掉os_cpu_c.c里面SysTick相關(guān)的定義。

2.OSInitHookBegin


這個(gè)函數(shù)被OSInit()開(kāi)頭調(diào)用,也就是我們main函數(shù)開(kāi)始調(diào)用OSInit()就會(huì)調(diào)用它。

注意:

#if OS_CPU_HOOKS_EN> 0u

也就是需要在os_cfg.h文件里面配置OS_CPU_HOOKS_EN>0.

3.OSTaskStkInit初始化任務(wù)堆棧


這個(gè)函數(shù)比較重要,在創(chuàng)建任務(wù)的時(shí)候調(diào)用它。主要是對(duì)芯片內(nèi)核寄存器進(jìn)行一個(gè)配置,并現(xiàn)場(chǎng)保護(hù)數(shù)據(jù)。這個(gè)函數(shù)根據(jù)芯片內(nèi)核不同,也存在很大不同。

Ⅶ、配置os_cpu.h文件

os_cpu.h文件位于工程uC/OS-II Ports結(jié)構(gòu)下面,主要是系統(tǒng)底層相關(guān)的某些定義(堆棧、數(shù)據(jù)類(lèi)型)、申明(函數(shù))等。

該文件下面源代碼比較簡(jiǎn)單,有些不使用,即移植過(guò)程需要修改的我會(huì)重點(diǎn)提示出來(lái)。

1.OS數(shù)據(jù)類(lèi)型


這部分是為系統(tǒng)定義相關(guān)的數(shù)據(jù)類(lèi)型,這里不用修改。

2.臨界區(qū)管理


我們使用默認(rèn)使用臨界區(qū)第3模式,這個(gè)定義主要是與os_cpu_a.asm文件中定義OS_CPU_SR_Save()函數(shù)有關(guān)。

3.函數(shù)申明


函數(shù)申明比較簡(jiǎn)單,這里有幾個(gè)函數(shù)我們?cè)趏s_cpu_a.asm和os_cpu_c.c文件中都屏蔽掉了的,這里也將他們屏蔽掉。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5433

    瀏覽量

    124427
  • STM32F10
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    15895
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3639
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32+esp8266連接機(jī)智云,上傳溫濕度數(shù)據(jù)并控制繼電器開(kāi)關(guān)(平臺(tái)配置、代碼生成、代碼移植

    本教程將詳細(xì)介紹如何將STM32微控制器與ESP8266Wi-Fi模塊連接到機(jī)智云平臺(tái),實(shí)現(xiàn)溫濕度數(shù)據(jù)的上傳與繼電器的遠(yuǎn)程控制。通過(guò)此過(guò)程,您將學(xué)會(huì)如何配置機(jī)智云平臺(tái),燒錄ESP8266固件,
    的頭像 發(fā)表于 07-15 18:54 ?26次閱讀
    <b class='flag-5'>STM32</b>+esp8266連接機(jī)智云,上傳溫濕度數(shù)據(jù)并控制繼電器開(kāi)關(guān)(平臺(tái)配置、代碼生成、代碼<b class='flag-5'>移植</b>)

    STM32F10xxx參考手冊(cè)

    STM32F1XX數(shù)據(jù)手冊(cè)中文版
    發(fā)表于 07-10 16:09 ?1次下載

    機(jī)智云配網(wǎng)教程第期:?jiǎn)纹瑱C(jī)代碼移植實(shí)戰(zhàn)

    stm32f103c8t6,WiFi模塊:ESP-01s,下載器:ST-LINK2.軟件:keil5的工程文件模板,mcu代碼包代碼資源:未移植移植后(注:本文是基于
    的頭像 發(fā)表于 07-01 17:32 ?161次閱讀
    機(jī)智云配網(wǎng)教程第<b class='flag-5'>三</b>期:?jiǎn)纹瑱C(jī)代碼<b class='flag-5'>移植</b>實(shí)戰(zhàn)

    STM32與機(jī)智云連接實(shí)現(xiàn)步驟與技巧(下篇):機(jī)智云代碼移植與優(yōu)化

    機(jī)智云SDK,集成API,實(shí)現(xiàn)數(shù)據(jù)傳輸和設(shè)備狀態(tài)同步,并分享移植過(guò)程中的常見(jiàn)問(wèn)題及解決方法,幫助開(kāi)發(fā)者順利實(shí)現(xiàn)云端連接。機(jī)智云相關(guān)代碼開(kāi)始移植相關(guān)移植步驟
    的頭像 發(fā)表于 05-23 18:10 ?244次閱讀
    <b class='flag-5'>STM32</b>與機(jī)智云連接實(shí)現(xiàn)步驟與技巧(下篇):機(jī)智云代碼<b class='flag-5'>移植</b>與優(yōu)化

    STM32G431移植FreeModbus

    STM32G431移植FreeModbus 的代碼已通過(guò)驗(yàn)證,在WeActStudio的STM32G431CoreBoard上進(jìn)行多次測(cè)試,均可正常讀取寄存器數(shù)值。STM32G431C
    發(fā)表于 04-19 16:50 ?1次下載

    uCOS III v3.08.01 移植PC Dev C++ 免虛擬機(jī)移植WinXP,Win7,Win10,Win 11

    uCOS III v3.08.01 移植PC Dev C++ 免虛擬機(jī)移植WinXP,Win7,Win10,Win 11。32位系統(tǒng)64位系統(tǒng)都可以。 這里有源碼和程序,歡迎下載測(cè)試
    發(fā)表于 04-15 20:14

    STM32F1開(kāi)發(fā)指南

    這本書(shū)詳細(xì)講述了STM32HAL庫(kù)開(kāi)發(fā)的配置流程,非常詳細(xì)
    發(fā)表于 01-21 15:33 ?3次下載

    基于機(jī)智云移植STM32L496G代碼移植

    前言最近我拿到了STM32L496AGMCU,發(fā)現(xiàn)其擴(kuò)展版可以連接ESP-01S。我想嘗試將開(kāi)發(fā)板連接到我們的機(jī)智云上,并根據(jù)機(jī)智云提供的文檔進(jìn)行程序移植。STM32CubeMX移植機(jī)
    的頭像 發(fā)表于 09-20 08:05 ?1177次閱讀
    基于機(jī)智云<b class='flag-5'>移植</b><b class='flag-5'>STM32</b>L496G代碼<b class='flag-5'>移植</b>

    【GD32 MCU 移植教程】10、從STM32F030系列移植到GD32E230系列

    GD32E230 對(duì)比 STM32F030 有著很好的兼容性和更高的性?xún)r(jià)比,內(nèi)核和外設(shè)都有所增強(qiáng)。本人曾做過(guò)產(chǎn)品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫(kù)的應(yīng)用程序移植
    的頭像 發(fā)表于 09-07 10:24 ?1545次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】10、從<b class='flag-5'>STM32F</b>030系列<b class='flag-5'>移植</b>到GD32E230系列

    【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列

    GD32F30x 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F10x 系列 MCU 保持高度兼容。本文主要從以下個(gè)方面進(jìn)行介紹:硬件資源
    的頭像 發(fā)表于 09-07 09:57 ?1964次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、從 <b class='flag-5'>STM32F</b>10x 系列<b class='flag-5'>移植</b>到 GD32<b class='flag-5'>F</b>30x 系列

    【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

    GD32F4xx 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F4xx系列 MCU 保持高度兼容。本文主要從以下個(gè)方面進(jìn)行介紹:硬件資源對(duì)比
    的頭像 發(fā)表于 09-06 09:40 ?2617次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】8、從 <b class='flag-5'>STM32F</b>4xx 系列<b class='flag-5'>移植</b>到 GD32<b class='flag-5'>F</b>4xx 系

    【GD32 MCU 移植教程】5、GD32E230 系列移植到 GD32F330 系列

    移植到 GD32F330 系列的需求,本文 檔專(zhuān)門(mén)針對(duì)既有的 GD32E230 代碼如何移植到 GD32F330 做一個(gè)詳細(xì)的介紹;
    的頭像 發(fā)表于 09-03 10:05 ?2608次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】5、GD32E230 系列<b class='flag-5'>移植</b>到 GD32<b class='flag-5'>F</b>330 系列

    【GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 GD32F303 系列微控制器移植到 GD32E503 系列微控制器。
    的頭像 發(fā)表于 08-31 09:36 ?2195次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】<b class='flag-5'>2</b>、從 GD32<b class='flag-5'>F</b>303 <b class='flag-5'>移植</b>到 GD32<b class='flag-5'>F</b>503

    基于STM32的E01和E01C驅(qū)動(dòng)移植

    實(shí)驗(yàn)簡(jiǎn)介基于STM32F103C8T6的E01系列(nRF24L01P)和E01C系列(SI24R1)的EBYTE官網(wǎng)例程移植。EBYTE官網(wǎng)例程是基于STM8L151編寫(xiě),本次實(shí)驗(yàn)的目的是將該例程
    的頭像 發(fā)表于 08-30 12:35 ?856次閱讀
    基于<b class='flag-5'>STM32</b>的E01和E01C驅(qū)動(dòng)<b class='flag-5'>移植</b>

    請(qǐng)問(wèn)STM32MP135F-DK如何移植ubuntu?

    STM32MP135F-DK如何移植ubuntu?
    發(fā)表于 07-23 07:10