1. 程式人生 > >1.uCOS-II簡介及移植uCOS-II到STM32F103平臺詳細步驟

1.uCOS-II簡介及移植uCOS-II到STM32F103平臺詳細步驟

I.說明

作者:WXP(翱翔雲端的鳥)

聯絡方式:[email protected] || 13100610853(聯絡請註明CSDN)

申明:個人原創,轉載請先經過本人同意!

要說的話:個人水平有限,寫之前也看過許多大神的部落格,不足之處,還請指正!有疑問歡迎大家聯絡我交流探討!

II.環境

軟體環境:KEIL-MDK v-5.24a

硬體:STM32F103ZET6最小系統板

III.uCOS-II

1.uCOS簡介

uCOS(也有人叫uC/OS)由美國人 Jean Labrosse1992年編寫的一個實時作業系統

1998年更新到uCOS-II,並於2000年得到美國航天管理局

(FAA)認證,可以用於飛行器中.

官方網站:www.micrium.com

2.uCOS-II的特點

1)可裁剪

uCOS-II原始碼中有一個專門用來裁剪系統的配置檔案,通過各種巨集的來開啟或者

 關閉那些不需要用到系統服務,這樣可以大大減小平臺移植uCOS-II所需要的儲存空間

 (2) 便於移植

  uCOS-II基本全部是用C語言寫的,只有和微處理器相關的那部分是用匯編寫的,彙編

 所佔比例極小,從而使得uCOS-II便於移植到各種微處理器上.事實上uCOS-II已經運用

 在了大部分的8位、16位、32位的MCU中了

 (3) 搶佔式

  uCOS-II是支援搶佔式,系統總是執行多個任務中優先級別最高的那個就緒任務

,

 優先順序會就緒任務會搶佔正在執行的任務,實時性得以保證

 (4) 多工

  uCOS-II同時支援255個任務,實際上不會用到這麼多,看具體應用來決定

 (5) 穩定可靠

  uCOS-II已經被使用在很多的產品上,經過市場產品的實際檢測,具有很好的穩定

 性和可靠性

3.uCOS-II的核心物件

  ⊙ 訊號量

  ⊙ 互斥訊號量

  ⊙ 事件標誌

  ⊙ 訊息郵箱

  ⊙ 訊息佇列

  ⊙ 記憶體管理

  ⊙ 時鐘管理

  ⊙ 任務管理

4.uCOS-II的檔案結構

  ⊙ 與處理器無關的程式碼

   os_core.c

   os_flag.c

   os_mbox.c

   os_mem.c

   os_mutex.c

   os_q.c

   os_sem.c

   os_task.c

   os_time.c

   os_tmr.c

   ucos_ii.h

  ⊙ 與處理相關的程式碼(移植時需要修改)

   os_cpu_c.c

   os_cpu_a.asm

   os_cpu.h

  ⊙ 與應用程式相關的程式碼

   os_cfg.h

   includes.h

IV.移植uCOS-IISTM32F103

1. uCOS-II移植準備工作

準備好uCOS-II原始碼、uCOS-II官方移植到STM32F107DemoSTM32F103裸機Demo

下載地址:

CSDNhttp://download.csdn.net/download/wang328452854/10110946

百度雲盤: http://pan.baidu.com/s/1eRHYeJo 密碼:d1pj

當然也可以從官網或者論壇下載,然後用你自己的裸機歷程也是可以的.

2. uCOS-II移植

(1) 若是按照我的程式碼,解壓後如下圖所示

 

(2) 在裸機程式碼STM32F103_Demo中新增一個目錄uCOS-II

 

(3)uCOS-II,並在uCOS-II目錄下新建兩個目錄PortsSource

 

(4) 將準備目錄下的Micrium\uCOS-II\Source下除os_cfg_c.hos_dbg_r.c全部複製到移植工程目錄下的Source

 

 

(5) 將準備目錄下Micrium_uC-Eval-STM32F107_uCOS-II\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealViem下的全部檔案拷貝到移植目錄的Ports

 

 

(6) Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-下的三個檔案拷貝到移植工程的App目錄下

 

 

(7) MDK開啟移植工程,新建Group  uCOS-II_Source uCOS-II_Ports並新增對應檔案如下

 

上圖中比之前多了app_hooks.c,主要是一些鉤子函式,若是需要從第6步中拷貝到App下新增即可

 

(8) 修改includes.h 如下

/*
*********************************************************************************************************
*                                              EXAMPLE CODE
*
*                          (c) Copyright 2003-2013; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*               Knowledge of the source code may NOT be used to develop a similar product.
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/
 
/*
*********************************************************************************************************
*
*                                           MASTER INCLUDES
*
*                                     ST Microelectronics STM32
*                                              on the
*
*                                     Micrium uC-Eval-STM32F107
*                                        Evaluation Board
*
* Filename      : includes.h
* Version       : V1.00
* Programmer(s) : EHS
*********************************************************************************************************
*/
 
#ifndef  INCLUDES_PRESENT
#define  INCLUDES_PRESENT
 
 
/*
*********************************************************************************************************
*                                         STANDARD LIBRARIES
*********************************************************************************************************
*/
 
#include  <stdarg.h>
#include  <stdio.h>
#include  <stdlib.h>
#include  <math.h>
 
 
/*
*********************************************************************************************************
*                                              LIBRARIES
*********************************************************************************************************
*/
 
//#include  <cpu.h>
//#include  <lib_def.h>
//#include  <lib_ascii.h>
//#include  <lib_math.h>
//#include  <lib_mem.h>
//#include  <lib_str.h>
 
 
/*
*********************************************************************************************************
*                                              APP / BSP
*********************************************************************************************************
*/
 
#include  "bsp.h"
 
/*
*********************************************************************************************************
*                                                 OS
*********************************************************************************************************
*/
 
#include <ucos_ii.h>
 
 
 
/*
*********************************************************************************************************
*                                                 ST
*********************************************************************************************************
*/
 
 
 
 
/*
*********************************************************************************************************
*                                            INCLUDES END
*********************************************************************************************************
*/
 
 
#endif


(9)修改main.c如下

/******************************************************************************
* File       : main.c
* Function   : 主檔案
* Description: None          
* Version    : V1.00
* Author     : WXP
* Date       :
* History    :  
******************************************************************************/
 
#include "includes.h"
 
 
//START 任務
//設定任務優先順序
#define START_TASK_PRIO      	10 //開始任務的優先順序設定為最低
//設定任務堆疊大小
#define START_STK_SIZE  	64
//任務堆疊
OS_STK START_TASK_STK[START_STK_SIZE];
//任務函式
void start_task(void *pdata);
 	   
//LED0任務
//設定任務優先順序
#define LED0_TASK_PRIO       	7
//設定任務堆疊大小
#define LED0_STK_SIZE  	    	64
//任務堆疊
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任務函式
void led0_task(void *pdata);
 
 
//LED1任務
//設定任務優先順序
#define LED1_TASK_PRIO       	6
//設定任務堆疊大小
#define LED1_STK_SIZE  	64
//任務堆疊
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任務函式
void led1_task(void *pdata);
 
int main(void)
{
 
Bsp_Init();
OSInit();   
 	OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//建立起始任務
OSStart();	  	 
    
    while(1)
{
 
}	 
}
 
  
//開始任務
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr=0;
pdata = pdata;
  	OS_ENTER_CRITICAL();	//進入臨界區(無法被中斷打斷)    
 	OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);	   
 	OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);	 	   
OSTaskSuspend(START_TASK_PRIO);	//掛起起始任務.
OS_EXIT_CRITICAL();	//退出臨界區(可以被中斷打斷)
}
 
 
 
 
//LED0任務
void led0_task(void *pdata)
{	 
while(1)
{
LED2(ON);
OSTimeDlyHMSM(0,0,0,200);
LED2(OFF);
OSTimeDlyHMSM(0,0,0,200);
}
}
 
//LED1任務
void led1_task(void *pdata)
{	  
while(1)
{
        LED3(ON);
OSTimeDlyHMSM(0,0,0,500);
LED3(OFF);
OSTimeDlyHMSM(0,0,0,500);
}
}


(10) 修改uCOS-II_Ports下的os_cpu_a.asm


 

(11) 編譯會出現一個錯誤,重定義了PendSV_Handler

 

這個時候只需要把stm32f10x_it.c中的PendSV_Handler註釋掉即可

 

此時編譯不會報錯但是並未修改完成

(12) 修改bsp_systick.c

 

(13) 修改os_cpu_c.c中的關於systick的配置初始化及中斷處理部分

 


(14) 註釋掉os_cpu.h中我們剛才修改過的函式部分

 

至此移植步驟完成了,main.c中兩個LED任務,下載到開發板中可以看到兩個燈以不同頻率閃爍

相關推薦

1.uCOS-II簡介移植uCOS-II到STM32F103平臺詳細步驟

I.說明 作者:WXP(翱翔雲端的鳥) 聯絡方式:[email protected] || 13100610853(聯絡請註明CSDN) 申明:個人原創,轉載請先經過本人同意! 要說的話:個人水平有限,寫之前也看過許多大神的部落格,不足之處,還請指正!有疑問歡

1)MFC簡介MFC Object與Windows Object之間的比較

libraries 並且 bsp 應用 ets 銷毀 靈活 eight 公司 MFC(微軟基礎類庫)   微軟基礎類庫(Microsoft Foundation Classes,簡稱MFC)是微軟公司提供的一個類庫(class libraries),以C++類的形式封裝了W

PHP入門(1)PHP簡介常用工具

簡介 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文字前處理器”)是一種通用開源指令碼語言,主要適用於Web開發領域。 特性(不限於以下幾點) (1)易學。由於PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法,

1講 ElasticSearch簡介安裝

ElasticSearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩

1)Docker簡介安裝

目錄 1、Docker簡介 1.1、什麼是虛擬化 1.2、什麼是Docker 1.3 容器與虛擬機器比較 1.4、Docker 元件 1.4.1、Docker伺服器與客戶端 1.4.2、Docker映象與容器 1.4.3、Registry(註冊中心) 2、Dock

1 、GO簡介環境

Go簡介 Go語言起源及其發展: 2007年,谷歌把Go作為一個20%專案開始研發,即讓員工抽出本職工作之外時間的20%, 投入在該專案上。 2009年11月10日,Go語言以開放原始碼的方式向全球釋出。 2011年3月16日,Go語言的第一個穩定(stabl

1、Python簡介環境安裝

1.Python是著名的“龜叔”Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個程式語言。 2.程式語言排行(截止2017-04) 3。python的特點:簡單、優雅。 4。python優點:a.完善的基礎程式碼庫 b

KVM 介紹(1):簡介安裝

2. KVM 的功能列表 KVM 所支援的功能包括: 支援CPU 和 memory 超分(Overcommit)支援半虛擬化I/O (virtio)支援熱插拔 (cpu,塊裝置、網路裝置等)支援對稱多處理(Symmetric Multi-Processing,縮寫為 SMP )支援實時遷移(Live M

Jmeter3.1、Ant、Jenkins接口自動化平臺搭建步驟;所遇問題解決方案

oracle 不兼容 網頁 href variable lan sign 停止 進行 Win下Jenkins+Jmeter+Ant自動化集成環境搭建 環境:win10 涉及:Jdk1.7.0_80、Jenkins2.60.3、Jmeter3.1、Ant1.9.9 步驟: 1

linux的簡介安裝centos-64位具體步驟

1.linux的簡介        Linux是基於Unix的開源免費的作業系統,由於系統的穩定性和安全性幾乎成為程式程式碼執行的最佳系統環境,linux系統的應用非常廣泛,不僅可以長時間的執行我們編寫的程式程式碼,還可以安裝在各種計算機硬體裝置中,比如手

CentOS6.9CentOS7.4的安裝詳細步驟

自動掛載 圖形化 安裝 storage size you dfa select term 安裝前的準備工作:1 VMware已經安裝好2 鏡像文件下載好(在這裏,我用的是CentOS-6.9-x86_64-bin-DVD1.iso和CentOS-7-x86_64-E

VMWare下linux安裝中文語言包安裝詳細步驟

1.首先 我安裝的版本是[紅帽企業Linux.5.5].rhel-server-5.5-x86_64-dvd 在虛擬機器上完成的安裝,我安裝的版本分享連結如下 linux版本下載:http://pan.baidu.com/s/1eQCWUPk 2.下載後的檔案為iso映象檔

ucos ii學習筆記1——任務中斷和排程

       UCos ii的中斷過程是接收到中斷請求,如果此時處理器處於中斷允許的情況下,系統中止當前執行的任務,而按照中斷向量指向的中斷服務子程式,當中斷服務子程式結束時,系統將根據當前優先順序連結串列中的情況,返回原先的被中止的任務繼續執行,或者到另一個優先順序更高

uCOS-II原始碼下載原始碼目錄結構

  攻克RTOS之旅,揚帆起航!   RTOS有眾多種,個人感覺,用得最火的是FreeRTOS,因為它即使用於商業途徑,也是開源免費的;其次是就是uCOS-II和uCOS-III。uCOS-II用於商業途徑是需要付費的,但是對於學習研究卻是免費的。它們同是嵌入

ucos-II移植到stm32上關於systick部分的修改

  systick初始化一般放在建立第一個任務裡,具體說是在OSInit(); 之後的第一個任務開始處,在早期版本的庫檔案中包含stm32f10x_systick.c和stm32f10x_systick.h兩個檔案, 因此我們只要在第一個任務開始處,呼叫下面這個函式即可。S

51微控制器ucos ii任務切換匯編程式碼分析(1)

ucos中任務切換函式都是彙編寫的,屬於“需移植”檔案, 這個彙編檔名一般叫做:OS_CPU_A.ASM 要想看懂任務切換的原理,首先遇到的第一個難點,就是OS_CPU_A.ASM這個彙編檔案裡的一大堆不常見的彙編偽指令,搞懂這些指令是搞懂程式原理的第一步。 這篇文章先只分

uCOS-II移植到51微控制器任務切換壓棧和出棧的操作

UCOS-II嵌入式實時作業系統 在任務切換時,微控制器壓入堆疊和出棧結構圖        由於51系列微控制器要求堆疊必須設定在片內RAM(IDATA)中,而這種處理器的片內RAM非常有限,不可能把應用程式中的所有任務的任務堆疊都設定在片內RAM中,所以就只能把應用程式

lpc2200移植ucos-II總結(四 編寫os_cpu_c.c檔案)

2.4 編寫os_cpu_c.c檔案 OSTaskStkInt()任務堆疊初始化函式,在編寫此函式之前,必須先確定任務的堆疊結構。而任務的堆疊結構是與CPU的體系結構、編譯器有密切的關聯。本移植的堆疊結構見圖2.1所示。 圖2.1 任務堆疊結構圖 1. 函式OSTaskS

Keil移植uCOS-II到STM32開發板(STM32F107VCT6)

開發環境:Keil V4.60 STM32韌體庫:V3.5 作業系統:uCOS-II V2.92 開發板:金牛STM32開發板 說明:此教程是參考野火uCOS移植教程完成移植後自我修改的! 3.建立工程資料夾(這裡為uCOSTest),進入該資料夾,依次建立A

ucos ii移植到STM32 (HardFault_Handler)

Ucosii的移植到STM32其實非常簡單,但有些時候就是會出現一些莫名其妙的錯誤!         Ucosii的移植網上都說是修改os_cpu.h     os_cpu_c.c      os_cpu_a.asm三個檔案,其實這樣說是不全的!還需要修改startu