精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UCOS2_STM32F1移植詳細過程 (三)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-04-07 11:44 ? 次閱讀

Ⅰ、概述

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

下載“UCOS2_STM32F1_3個簡單任務”作為參考工程。

筆者將“UCOS移植詳細過程”分為多篇文章來講述,敬請關注。

Ⅱ、下載(請到我博客下載)

筆者將F0、F1、F3、F4移植到最新UCOS2.92上。移植好的、獨立的4個工程供大家下載學習、研究。建立的任務都是一樣的,只是針對芯片不同,Ports目錄下相關的源代碼有差異、標準外設庫也存在差異。每一個系列針對不同型號芯片只需要適當改一下“型號”就行了。

提供下載的軟件工程都是在板子上運行,保證沒問題才上傳至360云盤。

UCOS基于STM32F0系列實例:

https://yunpan.cn/cRCZrQ3dzeVQq訪問密碼 e73f

UCOS基于STM32F1系列實例:

https://yunpan.cn/cRCZxGFsqHa6Q訪問密碼 39ff

UCOS基于STM32F3系列實例:

https://yunpan.cn/cRCZqPRCWs8UW訪問密碼 b305

UCOS基于STM32F4系列實例:

https://yunpan.cn/cRCZPqbFqXSPR訪問密碼 f177

UCOS源代碼工程

官網下載(需要賬號):

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

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

https://yunpan.cn/cRzcf8eSacEhE訪問密碼 1235

ST標準外設庫

官網下載(需要賬號):

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

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

https://yunpan.cn/cSaCpGejMSfr8訪問密碼 60ae

參考資料

https://yunpan.cn/cRCdSt73GwT6j訪問密碼 499e

Ⅲ、工程目錄結構說明

文件結構和工程目錄結構對應關系如上圖所示。


第一類(標準外設庫):

Startup Code:啟動代碼

STM32F10x_StdPeriph_Driver:標準外設庫庫驅動

CMSIS:標準接口

第二類(μC/OS-II實時內核):

uC/OS-II Source:內核源代碼(與處理器無關)

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

第三類(用戶應用):

Bsp:應用底層代碼(初始化、驅動等)

App:應用實現代碼(配置OS、應用等)

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

Ⅳ、配置os_cpu_a.asm文件

os_cpu_a.asm文件位于工程uC/OS-II Ports結構下面,主要是系統底層相關的一部分匯編代碼。

該文件主要對外部引用(全局變量、函數)做了一個申明,及部分系統相關源代碼(匯編)做了一個定義。

下面我將定義的幾個源代碼做一個描述,移植過程需要修改的我會重點提示出來。

1.全局申明


該文件開頭對全局變量和函數進行了一次聲明,只是使用的匯編,就如C語言里面的extern。

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

將OS_CPU_PendSVHandler改為PendSV_Handler,為了兼容ST標準外設庫啟動代碼(startup_stm32f10x_hd.s)。

2.NVIC配置


這部分是對NVIC(中斷控制)寄存器相關進行定義,就如預處理中宏定義一樣,對寄存器地址,狀態進行定義。

3.代碼生成指令


這幾條指令主要是針對匯編指令的一個處理。

4.狀態保存與恢復


這兩個匯編函數是程序運行在臨界區,對數據的保存和恢復的函數。主要作用就是保護數據不被破壞。

5.運行最高優先級任務


這個函數在任務切換的時候調用,知道任務切換原來的朋友來說這里不難理解。UCOS是按優先級來執行任務,優先級越高(優先級數值越?。?,越容易被執行。當執行的任務處于掛起(或刪除)時,系統就需要進行任務切換,切換的規則就是切換到最高優先級去執行。

6.上下文切換


系統切換任務可以從兩個地方,也就是從任務級和中斷級。這兩個函數的意思都一樣,當需要執行任務切換時,根據條件執行某一個。

7.PendSV_Handler中斷


PendSV_Handler中斷函數定義于這里,主要是在執行該中斷對M3內核寄存器進行一些操作(保存與修改)。

將OS_CPU_PendSVHandler改為PendSV_Handler,為了兼容ST標準外設庫啟動代碼(startup_stm32f10x_hd.s)。

8.總結os_cpu_a.asm

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

Ⅴ、配置os_cpu_c.c文件

os_cpu_c.c文件位于工程uC/OS-II Ports結構下面,主要是系統底層相關的一部分C語言接口代碼。

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

下面我將定義的幾個源代碼做一個描述,移植過程需要修改的我會重點提示出來。

1.系統滴答


這些都是關于SysTick系統滴答的宏定義和函數體,由于我們使用M3標準(ST庫里面有)的SysTick系統滴答函數接口,我們屏蔽掉os_cpu_c.c里面SysTick相關的定義。

2.OSInitHookBegin


這個函數被OSInit()開頭調用,也就是我們main函數開始調用OSInit()就會調用它。

注意:

#if OS_CPU_HOOKS_EN> 0u

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

3.OSTaskStkInit初始化任務堆棧


這個函數比較重要,在創建任務的時候調用它。主要是對芯片內核寄存器進行一個配置,并現場保護數據。這個函數根據芯片內核不同,也存在很大不同。

Ⅶ、配置os_cpu.h文件

os_cpu.h文件位于工程uC/OS-II Ports結構下面,主要是系統底層相關的某些定義(堆棧、數據類型)、申明(函數)等。

該文件下面源代碼比較簡單,有些不使用,即移植過程需要修改的我會重點提示出來。

1.OS數據類型


這部分是為系統定義相關的數據類型,這里不用修改。

2.臨界區管理


我們使用默認使用臨界區第3模式,這個定義主要是與os_cpu_a.asm文件中定義OS_CPU_SR_Save()函數有關。

3.函數申明


函數申明比較簡單,這里有幾個函數我們在os_cpu_a.asm和os_cpu_c.c文件中都屏蔽掉了的,這里也將他們屏蔽掉。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5322

    瀏覽量

    120021
  • STM32F10
    +關注

    關注

    0

    文章

    45

    瀏覽量

    15612
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3557
收藏 人收藏

    評論

    相關推薦

    基于機智云移植STM32L496G代碼移植

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

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

    GD32E230 對比 STM32F030 有著很好的兼容性和更高的性價比,內核和外設都有所增強。本人曾做過產品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫的應用程序移植
    的頭像 發表于 09-07 10:24 ?533次閱讀
    【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 保持高度兼容。本文主要從以下個方面進行介紹:硬件資源
    的頭像 發表于 09-07 09:57 ?532次閱讀
    【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 保持高度兼容。本文主要從以下個方面進行介紹:硬件資源對比
    的頭像 發表于 09-06 09:40 ?994次閱讀
    【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 系

    基于STM32的E01和E01C驅動移植

    實驗簡介基于STM32F103C8T6的E01系列(nRF24L01P)和E01C系列(SI24R1)的EBYTE官網例程移植。EBYTE官網例程是基于STM8L151編寫,本次實驗的目的是將該例程
    的頭像 發表于 08-30 12:35 ?296次閱讀
    基于<b class='flag-5'>STM32</b>的E01和E01C驅動<b class='flag-5'>移植</b>

    自制一款兼容STM32F1/F4芯片的飛控板

    自己制作的一款兼容STM32F1/F4芯片的飛控板。
    發表于 07-04 14:07 ?0次下載

    stm32f4跑ucos+emwin5.16 gui_init()初始化失敗的原因?

    我用stm32f4discovery 連了一塊ra8875的4.3寸屏幕, ucosii已經移植成功了,但是移植emwin5。16的時候在gui初始化的時候就會進入 HardFault_Handler(); 不知道是什么情況;
    發表于 05-17 12:33

    STM32F072怎么移植os?

    STM32F072 怎么移植os
    發表于 05-17 08:22

    STM32移植UCOS和編寫GUI程序的平臺如何建立?

    請教STM32移植UCOS和編寫GUI程序的平臺如何建立 ,需要哪些軟件,請各位大蝦、前輩指教,分享一下,或推薦一下教程,謝謝
    發表于 05-15 08:18

    請問如何快速移植stm32f1的程序到STM32C0中?

    如何快速移植stm32f1的程序到STM32C0中?
    發表于 03-08 06:54

    stm32必須要移植系統嗎

    電子等。在使用STM32進行開發時,是否需要進行系統移植是一個常見的問題。 系統移植是指將操作系統或者驅動程序從一個硬件平臺移植到另一個硬件平臺的
    的頭像 發表于 01-08 14:17 ?825次閱讀

    stm32移植ucos iii教程

    μC/OS-III是一個實時操作系統,廣泛應用于嵌入式系統開發中。在STM32系列微控制器上移植μC/OS-III可以充分發揮其實時性和多任務處理能力。本篇文章將為您提供一個詳實、細致的STM32
    的頭像 發表于 01-02 16:29 ?1376次閱讀

    移植 SBSFU 到 STM32G070 的過程

    電子發燒友網站提供《移植 SBSFU 到 STM32G070 的過程.pdf》資料免費下載
    發表于 12-18 11:04 ?4次下載
    <b class='flag-5'>移植</b> SBSFU 到 <b class='flag-5'>STM32</b>G070 的<b class='flag-5'>過程</b>

    在GD32F103移植STM32F103代碼

    使用相同FLASH和管腳數量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。雖然兩個款芯片的寄存器地址以及架構基本相同。但是需要注意的是GD32F10x主頻是108兆,但是
    的頭像 發表于 12-15 13:37 ?1605次閱讀
    在GD32<b class='flag-5'>F</b>103<b class='flag-5'>移植</b><b class='flag-5'>STM32F</b>103代碼

    實戰經驗 | 移植 SBSFU 到 STM32G070 的過程

    關鍵詞:SBSFU,移植 目錄預覽 1、前言 2、基于STM32G070和STM32G071的SBSFU 實現差異 3、開始
    的頭像 發表于 12-08 18:20 ?831次閱讀