久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3423|回復: 0
打印 上一主題 下一主題
收起左側

帶操作系統的stm32的oled溫濕度顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
實驗結果

  1. #ifndef _OS_H_
  2. #define _OS_H_
  3. #include "stm32f10x.h"
  4. #include <stdio.h>

  5. typedef signed char  os_i8;            
  6. typedef signed short os_i16;           
  7. typedef signed int   os_i32;     
  8. typedef signed long  os_i64;  
  9. typedef unsigned char  os_u8;            
  10. typedef unsigned short os_u16;           
  11. typedef unsigned int   os_u32;     
  12. typedef unsigned long  os_u64;  

  13. typedef os_u32   os_stk;            

  14. /*******************************OS參數定義*********************************************/
  15. #define OS_APP_MAX        15                                        //APP數量(1-255,含1個空閑APP,內存使用為N*(10~12)) bytes)  
  16. #define OS_APP_CLOCK             1                                                //APP時間切片,單位:1ms   
  17. #define STK_IDLE_SIZE     18                                        //空閑APP堆棧長度 (內存使用為N*4) bytes)

  18. #define OS_APP_FLAG_MAX                3                                                 //0-255*8(內存占用:N/8(+1) bytes),==0時不使用,不占內存
  19. #define OS_APP_MUTEX_MAX        2                                          //0-255(內存占用: N bytes)                                ,==0時不使用,不占內存
  20. #define OS_APP_QUEUE_MAX        2                                                //0-255 (內存占用:N^2 bytes)                 ,==0時不使用,不占內存

  21. #define _RAM_ALGO_        0                                                //0-rom,1-ram,算法數組保存位置。

  22. #define OSClock_1US                         (SystemCoreClock/8/1000000) //OS 1us頻率,(stm32f1--72MHz 8分頻 = 9MHz,1us頻率=9)
  23. /**************************************************************************************/

  24. //APP狀態
  25. #define APP_STATE_RUNNING    1
  26. #define APP_STATE_PENDING    2

  27. //系統布爾值
  28. typedef enum
  29. {
  30.         OS_FALSE=0,
  31.   OS_TRUE,
  32. }os_bool;

  33. //pend方式
  34. #define        APP_BLOCK    0
  35. #define APP_UNBLOCK  1


  36. #if ( OS_APP_MAX < 16 )
  37. #if ( _RAM_ALGO_ == 1 )
  38. extern os_u8 BIT_MAP[16];
  39. #else
  40. extern os_u8 const BIT_MAP[16];
  41. #endif
  42. #else
  43. #ifdef _RAM_ALGO_
  44. extern os_u8 const BIT_MAP[256];
  45. #else
  46. extern os_u8 const BIT_MAP[256];
  47. #endif
  48. #endif

  49. //APP控制塊類型定義
  50. typedef struct
  51. {
  52.         os_stk  *stk_ptr;  //APP棧指針 (必須是第一個)  
  53.   os_u32  delay_clock;//APP延時時間
  54.         os_u8   state;                        //APP狀態
  55.         os_u8   prio;     //APP優先級
  56. }OS_ACB;

  57. extern OS_ACB os_acb_list[OS_APP_MAX]; //各個APP的ACB,數組方式(標號0-空閑APP,標號1-app_01--標號n-app_n)
  58. extern OS_ACB *os_acb_cur;  //當前正在運行的APP
  59. extern OS_ACB *os_acb_rdy; //下個即將運行的APP

  60. //系統變量類型定義
  61. typedef struct
  62. {
  63.         os_u32 clock_counter;      //系統時鐘節拍累計變量
  64.         os_u32 app_clock;//APP時間切片(為系統時鐘節拍倍數,APP持續運行的時間
  65.         os_bool print_sta;
  66.         os_u8 lock_nesting;//APP切換鎖定層數統計變量
  67.         os_u8 int_nesting;//APP中斷層數統計變量
  68.         os_u8 app_cur_num;  //當前運行態APP的TCB組數標號
  69.         os_u8 app_rdy_bit_tbl;
  70.         os_u8 app_rdy_grp_bit_tbl;
  71. }OS_SYS;
  72. extern OS_SYS os_sys;//系統變量

  73. //OS提供的打印輸出函數  
  74. #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提供的打印輸出函數
  75. //#define os_printf(fmt, ...) { os_lock();printf( fmt, ##__VA_ARGS__);os_unlock();}//OS提供的打印輸出函數

  76. void os_main(void);                                                                                                                                         //系統主函數(主要用來創建APP)
  77. void API_os_core_enter(void);                            //關閉全局中斷函數(在匯編中)            
  78. void API_os_core_exit(void);                             //打開全局中斷函數(在匯編中)
  79. void os_init(void);                                                                                                                                         //系統初始使化函數
  80. void os_startup(void);                               //系統啟動函數
  81. void API_os_systick_init(void);
  82. void API_os_systick_handler(void);                                                                                         //系統定時器中斷函數(把此函數放在硬件定時器中斷函數中)
  83. void API_os_systick_on(void);
  84. void API_os_systick_off(void);
  85. void API_os_systick_irq_on(void);
  86. void API_os_systick_irq_off(void);
  87. void API_os_pendsv_init(void);
  88. void os_user_init(void);                                                                                                                        //用戶代碼初始化函數(用戶的初使化代碼放在此函數中)
  89. void API_os_psp_reset(void);                              //PSP指針初使化
  90. void os_scheduler(void);                              //APP調度器
  91. void API_os_sched_pulse(void);                            //APP環境切換函數
  92. void os_sched_and_switch(void);                       //APP調度并切換函數   
  93. void app_rdy_tbl_set(os_u8 app_num); //就緒列表置位表示 已就緒
  94. void app_rdy_tbl_reset(os_u8 app_num); //就緒列表復位表示 未就緒
  95. void os_app_rdy_num_update(void);//更新下個運行的APP
  96. os_stk* os_app_stk_init(void* app,os_stk *topstkptr); //APP堆棧初使化函數
  97. void app_ide(void);                              //空閑APP函數體
  98. void os_app_create_idle(void);

  99. //用戶可用API
  100. void os_app_create(void* app,os_stk *topstkptr,os_u8 prio);     //APP創建函數
  101. void os_app_pend(os_u8 prio);                                                                                 //掛起優先級為prio的APP
  102. void os_app_resume(os_u8 prio);                                                                         //恢復優先級為prio的APP
  103. void os_lock(void);                              //APP切換上鎖函數
  104. void os_unlock(void);                            //APP切換解鎖函數
  105. os_u32 os_clock_get(void);                       //獲取系統時鐘節拍數函數
  106. void delay_us(os_u32 us);                        //微秒延時函數
  107. void delay_ms(os_u32 ms);                               //毫秒延時函數
  108. void os_delay(os_u32 tick);                      //APP延時函數

  109. os_bool os_app_flag_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0或APP_BLOCK阻塞,=1或APP_UNBLOCK非阻塞(返回OS_TRUE表示收到POST)
  110. os_bool os_app_mutex_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0阻塞,=1非阻塞(返回OS_TRUE表示收到POST)
  111. os_u8 os_app_queue_pend(os_u8 blk_sta,os_u8 id); //blk_sta=0阻塞(不等于當前id則阻塞),=1非阻塞(返回隊列序號)
  112. void os_app_flag_post(os_u8 id);
  113. void os_app_mutex_post(os_u8 id);
  114. os_bool os_app_queue_post(os_u8 id); //返回OS_TRUE表示發送成功,OS_FALSE表示發送失敗(隊列已滿)
  115. #endif
復制代碼

Keil代碼下載: 硬件的另一種代碼.7z (199.75 KB, 下載次數: 19)
01.設計文檔.docx (179.64 KB, 下載次數: 20)
資料:http://www.zg4o1577.cn/bbs/dpj-214412-1.html

評分

參與人數 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线看h | 国产午夜精品一区二区三区嫩草 | www.久久精品视频 | 成人免费影院 | 九九99九九精彩46 | 成人免费高清 | 国产91视频播放 | 国产精品美女久久久久久免费 | japanhdxxxx裸体 | 国产一区二区 | 亚洲欧洲中文日韩 | 99精品视频在线观看 | 亚洲视频一区在线播放 | 综合色在线 | 久久久久国产一区二区三区四区 | 黄色在线观看网站 | 国产日韩一区二区三免费高清 | 成人激情视频在线播放 | 久久精品 | 国产精品久久久久久238 | 国产亚洲欧美在线 | 麻豆视频国产在线观看 | 97日韩精品 | 午夜午夜精品一区二区三区文 | 亚洲免费毛片 | 精品久久香蕉国产线看观看亚洲 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 日本久久综合 | 欧美国产亚洲一区二区 | 国产一区二区三区四区五区3d | 在线观看av网站永久 | 99精品在线| www国产成人| www.日韩av.com| 综合国产第二页 | 在线观看中文字幕视频 | 成人免费av在线 | 欧美午夜激情在线 | 精品二区 | 亚洲精品视频一区 | 亚洲一一在线 |