D12 补

09:26-10:4020p

处理器特定的寄存器

损失可移植性,提高时间精度

 

获知当前时间

内核一般通过jiffies值来获取当前时间。

 

驱动程序一般不需要知道墙鈡时间,即年月日时分秒。

 

有一个内核函数转变一个墙上时钟时间到一个jiffies 值, 是:

#include<linux/time.h>

unsigned long mktime(unsigned int year, unsigned int mon,

 unsigned int day, unsigned int hour,

 unsigned int min, unsigned int sec);

 

重复:直接在驱动中处理墙上时钟时间往往是一个在实现策略的信号,并且应当因此而被置疑.

 

在内核空间中处理绝对时间. 为此,<linux/time.h> 输出了 do_gettimeofday 函数. 当被调用时, 它填充一个 struct timeval 指针 --和在 gettimeofday 系统调用中使用的相同 -- 使用类似的秒和毫秒值. do_gettimeofday 的原型是:

 

 #include <linux/time.h>

 void do_gettimeofday(struct timeval *tv);

 

内核提供了实用函数current_kernel_time:

#include<linux/time.h>

struct timespeccurrent_kernel_time(void);

 

用来以各种方式获取当前时间的代码

 

延后执行

比时钟嘀哒长的延时没问题,可以直接利用系统时钟. 每个比时钟滴答还短的延时通常必须使用软件循环来实现。

 

长延时

忙等待

非常不推荐。因为在忙等待期间,cpu什么也不做,就像死了一样。非常影响性能。

 

让出处理器

 一旦一个进程使用调度来释放处理器, 无法保证进程将于何时拿回处理器。

 

超时

如果你的驱动使用一个等待队列来等待某些其他事件,但是你也想确保它在一个确定时间段内运行, 可以使用 wait_event_timeout 或者wait_event_interruptible_timeout:

 

#include<linux/wait.h>

longwait_event_timeout(wait_queue_head_t q, condition, long timeout);

longwait_event_interruptible_timeout(wait_queue_head_t q, condition, long timeout);

 

短延迟

内核函数 ndelay, udelay, 以及 mdelay 对于短延时好用,它们的原型是:

 

#include<linux/delay.h>

void ndelay(unsignedlong nsecs);

void udelay(unsignedlong usecs);

void mdelay(unsignedlong msecs);

 

内核定时器

如果我们需要在将来的某个时间点执行某个动作,同时在改时间点到来之前不想阻塞当前进程,则可以使用内核定时器。

 

因为内核定时器,不阻塞当前进程,所以类似于持有自旋锁的情形, 你必须遵守下列规则:

  • 不允许存取用户空间.
  •  不允许使用 current 指针,它在原子态没有意义
  •  不能进行休眠或者调度.

 

通过调用函数in_interrupt(),内核代码能够告知它是否在中断上下文中运行。,

一个和 in_interrupt()相关的函数是 in_atomic(). 调度被禁止时,它的返回值是非零。

 

定时器是竞态的潜在来源。任何通过定时器函数访问的数据结构都应该针对并发访问而进行保护。

 

定时器API

 

 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
刷OpenWRT到水星D12路由器上通常涉及到对硬件的理解和一些技术操作,因为并非所有型号的水星路由器都直接支持OpenWRT,尤其是那些设计专为特定固件优化的路由器。对于水星D12(型号可能不唯一,所以请提供完整型号),如果它是较旧的设备,并且原厂固件不提供足够功能或灵活性,用户可能会选择对其进行“越狱”或升级固件。 以下是刷OpenWRT到水星D12的一些通用步骤,但这可能会因具体型号的不同而有所变化: 1. **确认兼容性**:首先确定你的D12是否支持刷OpenWRT,通常这需要查阅社区论坛或官方文档,以及确认它的硬件平台和是否存在现成的第三方固件移植。 2. **准备工具**:你需要下载OpenWRT的相应固件包、TFTP服务器软件(用于传输固件文件)、以及可能的OpenWRT专用的刷机工具(比如`U-Boot`或`PB-BOOT`)。 3. **备份数据**:在开始刷机前,务必备份路由器现有的配置和重要数据,以防刷机过程中数据丢失。 4. **修改网络设置**:按照之前的例子,可能需要将路由器的管理IP地址从默认的192.168.1.1改为其他以避免与现有网络冲突。 5. **刷入OpenWRT**: - 使用TFTP刷机:通过电脑连接到路由器的USB端口或其他刷机模式,然后利用TFTP客户端上传OpenWRT的固件包到路由器。 - 使用预编译固件:如果有社区提供的针对你的D12的OpenWRT固件包,可以直接下载并烧录到Flash中。 6. **重启进入新系统**:完成固件安装后,路由器会自动重启。此时应该能够看到新的OpenWRT界面,需要按照提示设置网络和其他设置。 请注意,这是一般的步骤概述,具体的每一步可能都需要详细的型号指南或在线教程来指导。如果你不确定如何操作,强烈建议在熟悉技术的社区寻求帮助,或者找专业的技术支持,因为错误的操作可能导致路由器无法正常工作甚至永久损坏。刷机过程中可能存在风险,操作需谨慎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值