Ⅰ C語言作業:結構體編程練習 在屏幕上模擬顯示一個數字式時鍾 源代碼能給我的話+50,感謝
#include <stdio.h>
struct clock {
int hour;
int minute;
int second;
};
typedef struct clock CLOCK;
/*
函數功能:時、分、秒時間的更新
函數參數:無
函數返回值:無
*/
void Update(CLOCK *myclock) {
myclock->second++;
if (myclock->second == 60) { /*若second值為60,表示已過1分鍾,則 minute值加1*/
myclock->second = 0;
myclock->minute++;
}
if (myclock->minute == 60){ /*若minute值為60,表示已過1小時,則 hour值加1*/
myclock->minute = 0;
myclock->hour++;
}
if (myclock->hour == 24) { /*若hour值為24,則hour的值從0開始計時*/
myclock->hour = 0;
}
}
/*
函數功能:時、分、秒時間的顯示
函數參數:無
函數返回值:無
*/
void Display(CLOCK *myclock) { /*用回車符'\r'控制時、分、秒顯示的位置*/
printf("%2d:%2d:%2d\r", myclock->hour, myclock->minute, myclock->second);
}
/*
函數功能:模擬延遲1秒的時間
函數參數:無
函數返回值:無
*/
void Delay(void) {
long t;
for (t = 0; t < 290000000; t++) {
/*循環體為空語句的循環,起延時作用*/
}
}
int main(){
CLOCK myclock;
long i;
myclock.hour = myclock.minute = myclock.second = 0; /*hour,minute,second賦初值0*/
for (i = 0; i < 100000; i++) { /*利用循環結構,控制時鍾運行的時間*/
Update(&myclock); /*時鍾更新*/
Display(&myclock); /*時間顯示*/
Delay(); /*模擬延時1秒*/
}
return 0;
}
Ⅱ UCOS----時鍾節拍源碼分析
時鍾節拍類似於人體心臟的跳動,人體依賴心臟的跳動將血液輸入身體各個部位,支撐生命活動。時鍾節拍的是操作系統的時基,操作系統依賴於時鍾節拍推動 CPU 去執行指令。
時鍾節拍是系統以固定的頻率產生中斷(時基中斷),並在中斷處理與時間相關的事件,推動所有任務向前運行。時鍾節拍需要依賴於硬體定時器,STM32 通常使用 systick 時鍾作為 MCU 的內核定時器。
根據系統時鍾的初始化,在系統計數達到後,產生時鍾中斷,並調用中斷處理函數 OS_CPU_SysTickHandler 。
在 OS_CPU_SysTickHandler 函數中調用了 UCOS 的時間片處理函數 OSTimeTick ,對系統的時間片進行處理。
在 OSTimeTick 函數中給時基任務、定時器任務都發送了信號量。這里先介紹時基任務。時基任務是在 OS 初始化函數 void OSInit (OS_ERR *p_err) 中創建。
本章闡述了時鍾節拍的工作原理,看似微小卻是整個 uC/OS 系統的命脈。時鍾節拍的運行依賴於 CPU 的定時器, STM32 專門為此量身定製了 SysTick 時鍾。每個時鍾節拍到來時,時基任務就會執行,節拍任務的重點是更新節拍任務列表。在節拍列表中,存放的均是與時間事件(如延時或超時)相關的任務。如果任務到期,則需要更新響應的任務狀態。