在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

STM32入門學(xué)習(xí)筆記之uCOS-II系統(tǒng)移植4

jf_78858299 ? 來源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 16:13 ? 次閱讀

首先要做根據(jù)UCOSII中定義的OS_TICKS_PER_SEC來計算出SysTick的裝載值reload,開啟SysTick中斷,將reload值寫進SysTick的LOAD寄存器中,最后開啟SysTick,開啟SysTick后還要編寫其中斷服務(wù)函數(shù)。

③微秒級別延時函數(shù)

void delay_us( u16 nus )
{
#if SYSTEM_SUPPORT_OS
  u32 ticks, told, tnow, tcnt=0 ;
  u32 reload = SysTick->LOAD ;                  //LOAD的值
  ticks = nus*fac_us ;                                        //需要的節(jié)拍數(shù)
  OSSchedLock() ;                        //禁止調(diào)度,防止打斷us延時
  told = SysTick->VAL ;                                        //剛進入時的計數(shù)器值
  while( 1 )
  {
    tnow = SysTick->VAL ;
    if( tnow!=told )
    {
      //這里注意一下SYSTICK是一個遞減的計數(shù)器
      if( tnowelse
        tcnt += reload-tnow+told ;
      told = tnow ;
      //時間超過/等于要延遲的時間,則退出
      if( tcnt>=ticks )
        break ;
    }
  }
  OSSchedUnlock() ;                        //UCOSII的方式,恢復(fù)調(diào)度
#else
  u32 temp ;
  SysTick->LOAD = nus*fac_us ;                  //時間加載
  SysTick->VAL = 0x00 ;                      //清空計數(shù)器
  SysTick->CTRL = 0x01 ;                    //開始倒數(shù)
  do
  {
    temp = SysTick->CTRL ;
  }while( ( temp&0x01 )&&!( temp&( 1<<16 ) ) ) ;          //等待時間到達
  SysTick->CTRL = 0x00 ;                    //關(guān)閉計數(shù)器
  SysTick->VAL = 0x00 ;                      //清空計數(shù)器
#endif
}

④毫秒級別延時函數(shù)

void delay_ms( u16 nms )
{
#if SYSTEM_SUPPORT_OS
  //如果OS已經(jīng)在跑了,并且不是在中斷里面(中斷里面不能任務(wù)調(diào)度)
  if( ( delay_osrunning==1 )&&( delay_osintnesting==0 ) )
  {
    //延時的時間大于OS的最少時間周期
    if( nms>=fac_ms )
      OSTimeDly( nms/fac_ms ) ;                //UCOSII延時
    nms %= fac_ms ;                      //延時太短,采用普通方式延時
  }
  delay_us( ( u32 )( nms*1000 ) ) ;                  //普通方式延時
#else
  u32 temp ;
  SysTick->LOAD = ( u32 )nms*fac_ms ;              //時間加載(SysTick->LOAD為24bit)
  SysTick->VAL = 0x00 ;                      //清空計數(shù)器
  SysTick->CTRL = 0x01 ;                    //開始倒數(shù)
  do
  {
    temp = SysTick->CTRL ;
  }while( ( temp&0x01 )&&!( temp&( 1<<16 ) ) ) ;          //等待時間到達
  SysTick->CTRL = 0x00 ;                    //關(guān)閉計數(shù)器
  SysTick->VAL = 0x00 ;                      //清空計數(shù)器
#endif
}

(5)usart1.c文件修改

①添加頭文件定義

#if SYSTEM_SUPPORT_OS

#include "includes.h"

#endif

②修改串口中斷服務(wù)函數(shù)

void USART1_IRQHandler()
{
#if SYSTEM_SUPPORT_OS
  OSIntEnter() ;
#endif
  //接收到數(shù)據(jù)
  if( USART1->SR&( 1<<5 ) )
  {
    if( USART1->DR=='\\n' )
    {
      USART1_Data.Len = USART1_Rx_Count ;
      USART1_Rx_Count = 0 ;
      USART1_Data.State = 1 ;
    }
    USART1_Data.Buffer[ USART1_Rx_Count ] = USART1->DR ;
    USART1_Rx_Count ++ ;
  }
#if SYSTEM_SUPPORT_OS
  OSIntExit() ;
#endif
}

23.3 實驗例程

例程:利用移植完成的ucos-ii系統(tǒng)新建兩個任務(wù),并且在兩個任務(wù)中打印自定義的任務(wù)名稱。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "includes.h"
/****************************************************
Name    :Task01
Function  :任務(wù)1
Paramater  :None
Return    :None
****************************************************/
#define TASK01_PRIO  7                                          //設(shè)置任務(wù)優(yōu)先級
#define TASK01_SIZE  64                                          //設(shè)置任務(wù)堆棧大小
OS_STK TASK01_STK[ TASK01_SIZE ] ;                                    //任務(wù)堆棧
void Task01( void *pdata )
{
  while( 1 )
  {
    printf( "Task1 Run\\r\\n" ) ;
    delay_ms( 1000 ) ;
  }
}
/****************************************************
Name    :Task02
Function  :任務(wù)2
Paramater  :None
Return    :None
****************************************************/
#define TASK02_PRIO  6                                          //設(shè)置任務(wù)優(yōu)先級
#define TASK02_SIZE  64                                          //設(shè)置任務(wù)堆棧大小
OS_STK TASK02_STK[ TASK02_SIZE ] ;                                    //任務(wù)堆棧
void Task02( void *pdata )
{
  while( 1 )
  {
    printf( "Task2 Run\\r\\n" ) ;
    delay_ms( 2000 ) ;
  }
}
/****************************************************
Name    :Start
Function  :開始任務(wù)
Paramater  :None
Return    :None
****************************************************/
#define START_PRIO  10                                          //開始任務(wù)的優(yōu)先級設(shè)置為最低
#define START_SIZE  64                                          //設(shè)置任務(wù)堆棧大小
OS_STK START_STK[ START_SIZE ] ;                                    //任務(wù)堆棧
void Start( void *pdata )
{
    OS_CPU_SR cpu_sr=0 ;
  pdata = pdata ;
    OS_ENTER_CRITICAL() ;                                        //進入臨界區(qū)(無法被中斷打斷)
   OSTaskCreate( Task01, ( void * )0, ( OS_STK* )&TASK01_STK[ TASK01_SIZE-1 ], TASK01_PRIO ) ;
   OSTaskCreate( Task02, ( void * )0, ( OS_STK* )&TASK02_STK[ TASK02_SIZE-1 ], TASK02_PRIO ) ;
  OSTaskSuspend( START_PRIO ) ;                                    //掛起起始任務(wù)
  OS_EXIT_CRITICAL() ;                                        //退出臨界區(qū)(可以被中斷打斷)
}
/****************************************************
Name    :Main
Function  :主函數(shù)
Paramater  :None
Return    :None
****************************************************/
int main()
{
   STM32_Clock_Init( 9 ) ;                                        //系統(tǒng)時鐘設(shè)置
  SysTick_Init( 72 ) ;                                        //延時初始化
  USART1_Init( 72, 115200 ) ;                                      //串口初始化為115200
  OSInit() ;
   OSTaskCreate( Start, ( void * )0, ( OS_STK * )&START_STK[ START_SIZE-1 ], START_PRIO ) ;      //創(chuàng)建起始任務(wù)
  OSStart() ;
   while( 1 ) ;
}

將程序下載進單片機,打開串口助手可以看到以下的效果。

圖片

通過時間可以看出,Task2的任務(wù)2s打印一次數(shù)據(jù),Task1的任務(wù)1s打印一次數(shù)據(jù),和我們程序所寫一致,所以說明UCOS-II系統(tǒng)移植成功。

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

    關(guān)注

    6056

    文章

    44805

    瀏覽量

    643935
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6999

    瀏覽量

    124605
  • uCOS-Ⅱ
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8636
收藏 人收藏

    評論

    相關(guān)推薦

    快速實現(xiàn)STM32移植ucos-ii

    快速實現(xiàn)STM32移植ucos-ii,歡迎大家一起學(xué)習(xí)[groupid=618]單片機項目開發(fā)設(shè)計群[/groupid]
    發(fā)表于 08-08 16:28

    UCOS-II系統(tǒng)移植問題

    這幾天剛剛開始學(xué)習(xí)UCOS-II系統(tǒng)移植,我用的是野火開發(fā)板。資料上說是對startup_stm32f10x_hd.s 文件進行修改,但是我
    發(fā)表于 09-12 12:27

    uCOS-II理解和學(xué)習(xí)路線

    最近為啦準(zhǔn)備嵌入式比賽,重拾stm32學(xué)習(xí)。再次學(xué)習(xí)也算基本掌握查看調(diào)用STM32固件庫v3.5啦,覺得這才算入門
    發(fā)表于 08-23 09:15

    掌握移植uCOS-II的規(guī)范方法

    本文的目的是希望讀者能夠通過本文的內(nèi)容掌握移植uCOS-II 的規(guī)范方法。如果只是需要移植文件,可以直接去Micriμm的官網(wǎng)上下載。移植uCOS-
    發(fā)表于 08-23 08:50

    ucOS-II入門經(jīng)典教程

    ucOS-II入門經(jīng)典教程,ucOS-II入門經(jīng)典教程
    發(fā)表于 11-06 10:07 ?0次下載

    盤古STM32F103開發(fā)板移植uCOS-II詳細說明

    盤古STM32F103開發(fā)板移植uCOS-II詳細說明
    發(fā)表于 03-02 17:29 ?13次下載

    STM32平臺移植uCOS-II詳細說明-2012.11.13

    STM32平臺移植uCOS-II詳細說明-2012.11.13
    發(fā)表于 03-04 15:31 ?12次下載

    ucos-ii中文書籍

    ucos-ii中文書(邵貝貝).rar 入門經(jīng)典書籍
    發(fā)表于 03-11 11:02 ?6次下載

    ucOS-II入門經(jīng)典教程

    ucOS-II入門經(jīng)典教程,感興趣可以看看。
    發(fā)表于 07-25 18:52 ?47次下載

    uCOS-ii中文書

    學(xué)習(xí)uCOS-ii的最好中文教材,uCOS-ii中文書(邵貝貝)
    發(fā)表于 08-24 18:31 ?0次下載

    uCOS-II原理1

    原理uCOS-II
    發(fā)表于 12-20 22:58 ?5次下載

    uCOS-II原理2

    uCOS-II原理2
    發(fā)表于 12-20 22:53 ?0次下載

    uCOS-II原理3

    uCOS-II原理3
    發(fā)表于 12-20 22:52 ?0次下載

    uCOS-II在MSP430移植

    uCOS-II在MSP430移植
    發(fā)表于 10-12 17:24 ?9次下載
    <b class='flag-5'>uCOS-II</b>在MSP430<b class='flag-5'>移植</b>

    手把手盤古STM32開發(fā)板移植uCOS-II教程

    手把手盤古STM32開發(fā)板移植uCOS-II教程
    發(fā)表于 10-16 09:38 ?22次下載
    主站蜘蛛池模板: 四月婷婷七月婷婷综合 | 男人j进女人j的一进一出视频 | yellow中文字幕久久网 | 黄色高清视频网站 | 国产三级日本三级日产三级66 | 免费一级特黄a | 国产精品久久久久久久久齐齐 | 男人不识本网站上遍色站也枉然 | 乱肉情欲杂乱小说 | 最新亚洲一区二区三区四区 | 欧洲乱码专区一区二区三区四区 | 成年男人午夜片免费观看 | a级午夜毛片免费一区二区 a看片 | 美女涩涩网站 | 国产精品成人在线播放 | 久久综合亚洲 | 国产国语videosex另类 | 国产精品区在线12p 国产精品任我爽爆在线播放6080 | 干成人网 | 69美女poren 18| 欧美αv| 国产精品美女www爽爽爽视频 | 天天视频观看 | 一级特黄aaa大片29 | 国内精品视频 | 天天碰夜夜操 | 激情性爽三级成人 | 亚洲色图欧美激情 | 国产精品理论片在线观看 | 亚洲你我色| 久久久噜久噜久久综合 | 在线亚洲精品 | 18年大片免费在线观看 | 男女爱爱视频免费看 | 朱元璋传奇1998王耿豪版 | www.天天射 | 操xxx| 青娱乐伊人 | 日本不卡在线视频高清免费 | 18免费视频| 成 人色 网 站 欧美大片在线观看 |