首页 > 其他分享 >第五章学习笔记

第五章学习笔记

时间:2023-12-17 21:12:00浏览次数:32  
标签:定时器 tv 笔记 学习 第五章 timer printf include CPU

@

目录

一、学习笔记

1.硬件定时器

定时器由时钟源和可编程计数器组成。时钟源会产生周期性电信号。计数器减为0时,计数器向CPU生成一个定时器中断,计数器周期称为定时器刻度,是系统的基本计时单元。

2.个人计时定时器

实时时钟(RTC)
即使在个人计算机关机时,它也能连续运行。它用于实时提供时间和日期信息。

可编程间隔定时器(PIT)
PIT与CPU分离,提供以毫秒为单位的定时器刻度,在所有I/O设备中,PIT可以最高优先级IRO0中断,PIT定时器中断由Linux内核的定时器中断处理程序来处理。
多核CPU中的本地计时器
每个核都是一个独立的处理器,有自己的本地计时器。
高分辨率计时器
时间戳定时器(TSC)不适合作为实时设备,可提供纳秒级的定时器分辨率。

3.CPU操作和中断处理

由于无效地址、非法指令、越权等问题,可能会出现异常或陷阱。CPU会异常处理程序,当指令执行结束时,CPU会检查挂起的中断。如果有中断请求,但CPU未处于接受中断的状态,CPU会忽略中断,继续执行指令。
中断处理和异常处理在操作系统内核中进行。对于每个中断,可以编程中断控制器来生成唯一的中断向量,标识中断源。CPU会用它作为中断向量表,其中包含指向中断处理程序入口地址的指针,终端结束后,CPU恢复指令正常执行。

4.时钟服务函数

时钟服务可以通过系统调用、库函数和用户级命令调用
gettimeofday-settimeofday函数,gettimeofday()函数用于返回当前时间(当前秒的秒和微秒)。settimeofday()函数用于设置当前时间。在Unix/Linux中,时间表示自1970年1月1日00:00:00起经过的秒数。它可以通过库函数ctime(&time)转换为日历形式。
gettimeofday-settimeofday函数头文件如下:

include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
1.gettimeofday()函数:
代码:

include <sys/time.h>

include <unistd.h>

main()
{
struct timeval tv;
gettimeofday(&tv,NULL);
printf("tv_sec : %d\n", tv.tv_sec);
printf("tv_usec : %d\n", tv.tv_usec);
}
settimeofday()函数:
代码:

include <stdio.h>

include <stdlib.h>

include <sys/time.h>

include <time.h>

struct timeval t;

int main()
{
int r;
t.tv_sec=123456789;
t.tv_usec=0;
r=settimeofday(&t,NULL);
if(!r)
{
printf("settimeofday() failed\n");
exit(1);
}
gettimeofday(&t,NULL);
printf("sec=%ld usec=%ld\n",t.tv_sec,t.tv_usec);
printf("%s",ctime(&t.tv_sec));
}
time()函数:
代码:

include <stdio.h>

include <time.h>

int main()
{
time_t seconds;
seconds = time(NULL);
printf("%ld seconds has passed since 1970.1.1\n",seconds);
printf("%ld hours has been passed since 1970.1.1\n",seconds/3600);

return(0);

}

二、苏格拉底挑战

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、实践过程及截图

实践代码:

include <signal.h>

include <stdio.h>

include <sys/time.h>

include <time.h>

int count = 0;
struct itimerval t;
time_t start,end ;
void timer_handler(int sig){
end =time(NULL);
printf("timer_handler : signal %d count=%d , diff: %ld \n",sig, ++count,end -start);
start = end;
if( count >= 8){
printf("cancel timer \n");
t.it_value.tv_sec = 0 ;
t.it_value.tv_usec = 0;
setitimer(ITIMER_VIRTUAL, &t , NULL);
}
}

int main(){
struct itimerval timer ;
signal (SIGVTALRM ,timer_handler);
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 100000;
//every 1s afterward
timer.it_interval.tv_sec = 1;
timer.it_interval.tv_usec = 0;
// start a virtual itimer
start = time(NULL);
setitimer( ITIMER_VIRTUAL , &timer ,NULL );
printf("press Ctrl + C to terminate \n");
while(1);
}
截图
在这里插入图片描述

标签:定时器,tv,笔记,学习,第五章,timer,printf,include,CPU
From: https://www.cnblogs.com/ZZk15079494877/p/17809760.html

相关文章

  • 第四章学习笔记
    @目录一、学习笔记1.并行计算导论2.线程3.线程操作4.线程管理函数5.线程实例程序(见实践过程及截图)6.线程同步二、苏格拉底挑战三、实践过程及截图include<stdio.h>include<stdlib.h>include<pthread.h>defineN4四、问题及解决方式一、学习笔记1.并行计算导论Linux环境中......
  • 第十四章学习笔记
    @目录一、学习笔记1.MySQL简介2.安装MySQL3.使用MySQLmysql>SHOWDATABASES;二、苏格拉底挑战三、实践过程及截图include<stdio.h>include<my_global.h>include<mysql.h>include<stdio.h>include<stdlib.h>include<my_global.h>include<mysql.h>四、问题与......
  • 第十三章学习笔记
    @目录一、学习笔记1.TCP/IP协议2.IP主机和IP地址3.IP协议4.IP数据包格式5.路由器6.UDP7.TCP8.端口编号9.网络和主机字节序10.TCP/IP网络中的数据流二、苏格拉底挑战三、实践过程及截图include<stdio.h>include<stdlib.h>include<string.h>include<sys/socket.h>include......
  • STM32学习笔记_PWM驱动舵机和直流电机(4)
    STM32驱动舵机:舵机接线图:将PWM脚接在开发板PA1处;新建舵机模块:分析舵机的PWM信号:在一个周期20ms的脉冲信号上,高电平占空比为0.5ms-2.5ms分别对应着0°-180°。计算PWM的参数信息:PSC为72,ARR为20K,这样就得到一个频率周期为50Hz的信号。其中20KHz等于20ms,将CCR设置为500即=0.5ms的占空......
  • openGauss学习笔记-163 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-163openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-简介163.1关于COPYFROMSTDIN导入数据用户可以使用以下方式通过COPYFROMSTDIN语句直接向openGauss写入数据。通过键盘输入向openGauss数据库写入数据。详细请参见COPY。通过......
  • 2023-2024-1 20231425《计算机基础与程序设计》第十二周学习总结
    2023-2024-120231425《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业)这个作业的目标自学《计算机科学概论》第17章,《C语......
  • 2023-2024-1 20231304 《计算机基础与程序设计》第十二周学习总结
    2023-2024-120231304《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业这个作业的目标《C语言程序设计》第11章并完成云班课测试作业......
  • 学期 2023-2024-1 20232326《网络空间安全导论》第六周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:挑战应答认证协议为什么可以对抗重放攻击?问题1解决方案:百度得知挑战应答认证协议可以对抗重放攻击的原因是因为它引入了挑战和应答的机制。在该协议中,服务端会向客户端发送一个随机的挑战值,客户端必须通过对挑战值进行加密......
  • 2023-2024-1 20231303 《计算机基础与程序设计》赵泊瑄第十二周学习总结
    2023-2024-120231303《计算机基础与程序设计》赵泊瑄第十二周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里作业要求的链接https://i.cnblogs.com/posts/edit)这个作业的目标总结第十二周学习收获作业正文2023-......
  • 2023-2024-1 20231306 《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业这个作业的目标无作业正文https://www.cnblogs.com/zwywuhu/p/17908748.html教材学习内容总结《C语言程序设计》——第十......