当前位置: 首页 > java >正文

【北京迅为】iTOP-4412精英版使用手册-第二十一章 延时函数专题

iTOP-4412开发板【精英版】搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与大容量,纵使海量思考也能及时处理。配备三星S5M8767电源管理。配备Android、Linux+Qt、Ubuntu操作系统,开启学习、研发的全新方式。Exynos4412开发板处理器成功应用于三星GALAXYS3,联想K860,魅族MX2等热门产品当中,并取得巨大成功。功耗控制以及强劲的性能一直为业内称道,超过5000万片的出货量,足以证明其稳定性与可用性。已成为三星官方推广的处理器之一,并承诺长期供货。


第二十一章 延时函数专题

本章介绍的延时函数,使用起来非常简单,但是却会经常用到的,所以单独作为一个专题来介绍。

除了介绍系统编程中的延时函数,还会介绍到内核中的延时函数,它们的使用方法多是类似的,在驱动专题中大家可以使用,本章就不提供具体的例子了,只介绍函数调用。

本章配套视频为

“视频 12_01 延时之基本知识介绍”

“视频 12_02 延时之延时实验

21.1 Linux 中的延时函数介绍

这里要注意的是,不同的操作系统下,延时函数是不一样的,由具体系统决定的。Linux 中常用的函数有以下函数 sleep、usleep、ndelay、udelay、mdelay 等。

Linux 系统编程下用到的延时函数在头文件“#include <unistd.h>”中,包括函数sleep、usleep。

Linux 内核中用到的延时函数在“#include <linux/delay.h>”中,包括函数 ndelay、udelay、mdelay。

函数 sleep

函数 sleep 是秒延时。函数原型如下:

unsigned int sleep(unsigned int seconds);

例如:sleep(1),即延时一秒。

返回无符号的整形数值,如果延时成功则返回 0,如果延时过程中被打断,则返回剩余的秒数。

例如 sleep(5),返回值为 3,那么实际延时就是 5-3=2 秒。

函数 usleep 

函数 usleep 是微妙延时。函数原型如下:

int usleep(useconds_t usec);

useconds 需要小于 1000000

例如:usleep(10),表示延时 10 微秒。

延时成功则返回 0,失败则返回-1

函数 delay 系列

函数 delay 系列是在 Linux 内核中用的,也就是在 linux 驱动中,会用到。函数 mdelay 是毫秒延时,函数原型如下:

void mdelay(unsigned long msecs);

例如:mdelay(10),表示延时 10 毫秒。

函数 udelay 是微秒延时,函数原型如下:

void udelay(unsigned long usecs);

例如:udelay(5),表示延时 5 微秒。

函数 ndelay 是纳秒延时,函数原型如下:

void ndelay(unsigned long nsecs);

例如:ndelay(3),表示延时 3 纳秒。

再提醒一下,这里的 delay 函数只是在内核中使用的,sleep 是在系统编程中使用的。要注意区分。

21.2 Linux应用中的延时实验

本实验先介绍简单的延时应用,在学习了后面时间管理之后,再对这些延时函数的进度进行测试,虽然函数看起来类似,但是实现的原理不一样,精度不同,导致应用的场合也会不同。

函数代码

linux 系统编程中使用的是 sleep 和 usleep 函数。编写简单的 sleep.c 文件测试 sleep 函数。

首先添加头文件,如下图所示。

然后 main 函数如下图所示。 

 

如上图代码所示。

使用 sleep 和 usleep 函数分别延时 2 秒和 1 秒,然后循环打印信息。

编译运行测试

在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/”,使用命令“mkdir sleep”新建 sleep 文件夹,将源码sleep.c 拷贝进去。

进入新建的文件夹 sleep,如下图所示。

 使用命令“arm-none-linux-gnueabi-gcc -o sleep sleep.c -static”编译 sleep 文件, 如下图所示,使用命令“ls”可以看到生成了 sleep 可执行文件。

 这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 sleep,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序如下。

 

如上图所示,运行之后会打印“sleep 2!”和“usleep 1000000!”。退出可以使用键盘输入“Ctrl+c”

21.3 Linux内核驱动中的延时

Linux 内核中使用 delay 系列函数,在后面驱动的学习中,再去测试 delay 函数,用起来比较简单。

先要调用头文件“#include <linux/delay.h>”,然后就可以使用 delay 系列的函数,在驱动做做延时操作了。

常用的地方,例如在驱动对硬件进行初始化的时候,例如芯片有上电时序,那么这个时候就需要用到延时函数,直接调用 delay 即可。

http://www.xdnf.cn/news/14204.html

相关文章:

  • Python爬虫-批量爬取快手视频并将视频下载保存到本地
  • BeckHoff PLC --> 料筐(KLT Box)自动对中与抓取程序分析
  • Deep Research Agent的深度与广度如何保证
  • OSGI 是什么,有哪些具体应用、java8、9、10、11比较
  • C++操作系统与网络编程(针对特定岗位)
  • SpringBoot打包运行原理和加载机制原理
  • 从大数据到大模型:我们是否在重蹈覆覆辙
  • 一文详解前缀和:从一维到二维的高效算法应用
  • Java相关-链表-设计链表-力扣707
  • JS进阶 Day02
  • 在tensorrt engine中提高推理性能小记
  • 互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战
  • Flask文件上传与异常处理完全指南
  • create_react_agent + MCP tools
  • TDengine 如何从 2.x 迁移到 3.0
  • Java并发编程实战 Day 22:高性能无锁编程技术
  • JAVA关键字-final
  • Semaphore入门案例
  • Java线程池ThreadPoolExecutor的状态
  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘%‘
  • 基于 C 语言的图书管理系统开发详解​
  • 基于YOLOv11+PP-OCRv5深度学习的智能车牌检测与识别系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • 【SpringMVC 入门介绍】
  • 零基础RT-thread第二节:按键控制
  • Redux 原理深度剖析
  • 备忘录模式:文本编辑器撤销功能实现
  • 2025年渗透测试面试题总结-字节跳动[实习]安全研究员(题目+回答)
  • 浏览器 报502 网关错误,解决方法2
  • 论文精读Lami-Detr:Open-Vocabulary Detection with Language Model Instruction
  • 芯片的起点——从硅到晶圆制造