Ⅰ 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 时钟。每个时钟节拍到来时,时基任务就会执行,节拍任务的重点是更新节拍任务列表。在节拍列表中,存放的均是与时间事件(如延时或超时)相关的任务。如果任务到期,则需要更新响应的任务状态。