|
實(shí)驗(yàn)結(jié)果
IMG_20211110_193229.jpg (2.62 MB, 下載次數(shù): 62)
下載附件
實(shí)驗(yàn)效果
2021-11-16 11:39 上傳
- #ifndef _OS_H_
- #define _OS_H_
- #include "stm32f10x.h"
- #include <stdio.h>
- typedef signed char os_i8;
- typedef signed short os_i16;
- typedef signed int os_i32;
- typedef signed long os_i64;
- typedef unsigned char os_u8;
- typedef unsigned short os_u16;
- typedef unsigned int os_u32;
- typedef unsigned long os_u64;
- typedef os_u32 os_stk;
- /*******************************OS參數(shù)定義*********************************************/
- #define OS_APP_MAX 15 //APP數(shù)量(1-255,含1個空閑APP,內(nèi)存使用為N*(10~12)) bytes)
- #define OS_APP_CLOCK 1 //APP時間切片,單位:1ms
- #define STK_IDLE_SIZE 18 //空閑APP堆棧長度 (內(nèi)存使用為N*4) bytes)
- #define OS_APP_FLAG_MAX 3 //0-255*8(內(nèi)存占用:N/8(+1) bytes),==0時不使用,不占內(nèi)存
- #define OS_APP_MUTEX_MAX 2 //0-255(內(nèi)存占用: N bytes) ,==0時不使用,不占內(nèi)存
- #define OS_APP_QUEUE_MAX 2 //0-255 (內(nèi)存占用:N^2 bytes) ,==0時不使用,不占內(nèi)存
- #define _RAM_ALGO_ 0 //0-rom,1-ram,算法數(shù)組保存位置。
- #define OSClock_1US (SystemCoreClock/8/1000000) //OS 1us頻率,(stm32f1--72MHz 8分頻 = 9MHz,1us頻率=9)
- /**************************************************************************************/
- //APP狀態(tài)
- #define APP_STATE_RUNNING 1
- #define APP_STATE_PENDING 2
- //系統(tǒng)布爾值
- typedef enum
- {
- OS_FALSE=0,
- OS_TRUE,
- }os_bool;
- //pend方式
- #define APP_BLOCK 0
- #define APP_UNBLOCK 1
- #if ( OS_APP_MAX < 16 )
- #if ( _RAM_ALGO_ == 1 )
- extern os_u8 BIT_MAP[16];
- #else
- extern os_u8 const BIT_MAP[16];
- #endif
- #else
- #ifdef _RAM_ALGO_
- extern os_u8 const BIT_MAP[256];
- #else
- extern os_u8 const BIT_MAP[256];
- #endif
- #endif
- //APP控制塊類型定義
- typedef struct
- {
- os_stk *stk_ptr; //APP棧指針 (必須是第一個)
- os_u32 delay_clock;//APP延時時間
- os_u8 state; //APP狀態(tài)
- os_u8 prio; //APP優(yōu)先級
- }OS_ACB;
- extern OS_ACB os_acb_list[OS_APP_MAX]; //各個APP的ACB,數(shù)組方式(標(biāo)號0-空閑APP,標(biāo)號1-app_01--標(biāo)號n-app_n)
- extern OS_ACB *os_acb_cur; //當(dāng)前正在運(yùn)行的APP
- extern OS_ACB *os_acb_rdy; //下個即將運(yùn)行的APP
- //系統(tǒng)變量類型定義
- typedef struct
- {
- os_u32 clock_counter; //系統(tǒng)時鐘節(jié)拍累計(jì)變量
- os_u32 app_clock;//APP時間切片(為系統(tǒng)時鐘節(jié)拍倍數(shù),APP持續(xù)運(yùn)行的時間
- os_bool print_sta;
- os_u8 lock_nesting;//APP切換鎖定層數(shù)統(tǒng)計(jì)變量
- os_u8 int_nesting;//APP中斷層數(shù)統(tǒng)計(jì)變量
- os_u8 app_cur_num; //當(dāng)前運(yùn)行態(tài)APP的TCB組數(shù)標(biāo)號
- os_u8 app_rdy_bit_tbl;
- os_u8 app_rdy_grp_bit_tbl;
- }OS_SYS;
- extern OS_SYS os_sys;//系統(tǒng)變量
- //OS提供的打印輸出函數(shù)
- #define os_printf(fmt, ...) { os_lock();if(os_sys.print_sta==OS_FALSE){ os_sys.print_sta=OS_TRUE;printf( fmt, ##__VA_ARGS__); os_sys.print_sta=OS_FALSE;}os_unlock();}//OS提供的打印輸出函數(shù)
- //#define os_printf(fmt, ...) { os_lock();printf( fmt, ##__VA_ARGS__);os_unlock();}//OS提供的打印輸出函數(shù)
- void os_main(void); //系統(tǒng)主函數(shù)(主要用來創(chuàng)建APP)
- void API_os_core_enter(void); //關(guān)閉全局中斷函數(shù)(在匯編中)
- void API_os_core_exit(void); //打開全局中斷函數(shù)(在匯編中)
- void os_init(void); //系統(tǒng)初始使化函數(shù)
- void os_startup(void); //系統(tǒng)啟動函數(shù)
- void API_os_systick_init(void);
- void API_os_systick_handler(void); //系統(tǒng)定時器中斷函數(shù)(把此函數(shù)放在硬件定時器中斷函數(shù)中)
- void API_os_systick_on(void);
- void API_os_systick_off(void);
- void API_os_systick_irq_on(void);
- void API_os_systick_irq_off(void);
- void API_os_pendsv_init(void);
- void os_user_init(void); //用戶代碼初始化函數(shù)(用戶的初使化代碼放在此函數(shù)中)
- void API_os_psp_reset(void); //PSP指針初使化
- void os_scheduler(void); //APP調(diào)度器
- void API_os_sched_pulse(void); //APP環(huán)境切換函數(shù)
- void os_sched_and_switch(void); //APP調(diào)度并切換函數(shù)
- void app_rdy_tbl_set(os_u8 app_num); //就緒列表置位表示 已就緒
- void app_rdy_tbl_reset(os_u8 app_num); //就緒列表復(fù)位表示 未就緒
- void os_app_rdy_num_update(void);//更新下個運(yùn)行的APP
- os_stk* os_app_stk_init(void* app,os_stk *topstkptr); //APP堆棧初使化函數(shù)
- void app_ide(void); //空閑APP函數(shù)體
- void os_app_create_idle(void);
-
- //用戶可用API
- void os_app_create(void* app,os_stk *topstkptr,os_u8 prio); //APP創(chuàng)建函數(shù)
- void os_app_pend(os_u8 prio); //掛起優(yōu)先級為prio的APP
- void os_app_resume(os_u8 prio); //恢復(fù)優(yōu)先級為prio的APP
- void os_lock(void); //APP切換上鎖函數(shù)
- void os_unlock(void); //APP切換解鎖函數(shù)
- os_u32 os_clock_get(void); //獲取系統(tǒng)時鐘節(jié)拍數(shù)函數(shù)
- void delay_us(os_u32 us); //微秒延時函數(shù)
- void delay_ms(os_u32 ms); //毫秒延時函數(shù)
- void os_delay(os_u32 tick); //APP延時函數(shù)
- os_bool os_app_flag_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0或APP_BLOCK阻塞,=1或APP_UNBLOCK非阻塞(返回OS_TRUE表示收到POST)
- os_bool os_app_mutex_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0阻塞,=1非阻塞(返回OS_TRUE表示收到POST)
- os_u8 os_app_queue_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0阻塞(不等于當(dāng)前id則阻塞),=1非阻塞(返回隊(duì)列序號)
- void os_app_flag_post(os_u8 id);
- void os_app_mutex_post(os_u8 id);
- os_bool os_app_queue_post(os_u8 id); //返回OS_TRUE表示發(fā)送成功,OS_FALSE表示發(fā)送失敗(隊(duì)列已滿)
- #endif
復(fù)制代碼
Keil代碼下載:
硬件的另一種代碼.7z
(199.75 KB, 下載次數(shù): 19)
2021-11-16 22:10 上傳
點(diǎn)擊文件名下載附件
硬件端代碼 下載積分: 黑幣 -5
01.設(shè)計(jì)文檔.docx
(179.64 KB, 下載次數(shù): 20)
2021-11-16 11:45 上傳
點(diǎn)擊文件名下載附件
上位機(jī)設(shè)計(jì)文檔 下載積分: 黑幣 -5
資料:http://www.torrancerestoration.com/bbs/dpj-214412-1.html
|
評分
-
查看全部評分
|