首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python实现微秒延时

Python实现 微秒(μs) 级 延时/计时 的方法 前言 最近在学习树莓派的GPIO,想用Python来读取DHT11温湿度传感器的数据,DHT11是使用单总线通信的,需要用到微秒级的延时,使用sleep...这个方法只适用于Linux系统,Windows系统不知道怎么回事,不管怎么弄延时结果都是1000微秒起步。...源码: import time # 导入time模块 # https://blog.zeruns.tech/ def delayMicrosecond(t): # 微秒延时函数 start...上面的源码的 t-3 是时间补偿,因为调用函数,执行循环等指令也会消耗时间,可以根据自己测试出来自己修改,我用树莓派4测试出的结果是多消耗了3微秒,所以要减去3。...delayMicrosecond(35) #延时 35 微秒 b=time.time() # 记录延时函数结束时的时间 print("https://blog.zeruns.tech/") print

1.9K40

Python实现微秒延时

Python实现 微秒(μs) 级 延时/计时 的方法 前言 最近在学习树莓派的GPIO,想用Python来读取DHT11温湿度传感器的数据,DHT11是使用单总线通信的,需要用到微秒级的延时,使用sleep...[2021-04-10_21-50-40.png] 这个方法只适用于Linux系统,Windows系统不知道怎么回事,不管怎么弄延时结果都是1000微秒起步。...源码: import time # 导入time模块 # https://blog.zeruns.tech/ def delayMicrosecond(t): # 微秒延时函数 start...上面的源码的 t-3 是时间补偿,因为调用函数,执行循环等指令也会消耗时间,可以根据自己测试出来自己修改,我用树莓派4测试出的结果是多消耗了3微秒,所以要减去3。...delayMicrosecond(35) #延时 35 微秒 b=time.time() # 记录延时函数结束时的时间 print("https://blog.zeruns.tech/") print

3.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RTOS 上微秒延时方案

    微秒延时设计方案 一般 RTOS 系统时钟 1KHz 的情况下,thread_sleep() 的最短时间是 1ms。在实时控制中有些情况需要微秒(us)级延时,这该怎么办呢?...微秒延时有两种实现思路:一是着情提高系统时钟,二是使用 MCU 的高精度定时器。...我们就利用这个特点来完成线程的“被动触发”,即: 1、信号量建立时初值为 0 2、在中断释放一次信号量(即信号量值加 1) 这样中断发生后就能立刻唤醒挂起在该信号量下的线程,即完成了线程的被动触发。...图中标在 High-precision Timer 左边的标签是说:因为硬件定时器产生了中断,才使得 High-precision Timer 线程对延时时间到的线程进行 resume。...时间粒度测试2 ThreadX 据说可以在 200MHz 的 MCU 上达到亚微秒级的上下文切换,Sugar 测试的时间粒度在 150us 时比较稳定。

    4.7K31

    STM32使用定时器实现微秒(us)级延时

    引言 目前开发STM32普遍使用HAL库,但 HAL 库封装的延时函数目前仅支持 ms 级别的延时,日常很多情况下会用到 us 延时,特别是一些传感器的数据读取过程,对时序要求比较严格,us 延时必不可少...,因此我们今天来介绍STM32如何使用定时器实现微秒(us)级延时。...使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制 到几毫秒。 通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。...使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。...定时器按照此频率计数,累计 TIM_Period 个后产生一个更新或者中断。 程序 定时器相关配置程序都由STM32CubeMX帮助我们生成了,我们主要来编写一下微秒延时函数。

    3.2K20

    使用系统定时器SysTick实现精确延时微秒和毫秒函数

    如果SysTick初始化为: SysTick_Config(SystemCoreClock / 1000); //定时1ms 即SysTick定时器每1ms中断一次,如果我们定义全局变量,然后在中断函数...,让此变量递减,而在延时函数,一直判断此变量是否减到了0,那么这样就实现了一个延时毫秒的函数。...同理改变定时器的计数值为: SysTick_Config(SystemCoreClock / 1000000); //定时1us 那么就实现了每1us中断一次,所以延时微秒延时毫秒函数的实现: uint32...= 0); } 在使用延时函数之前,只需要进行系统时钟的更新即可,当然也可以不更新,因为在程序之前之前,系统启动文件已经执行了系统时钟更新。...总结 由于SysTick定时器是所有的ARM Cortex-M内核MCU都有的一个定时器,所以以上延时微秒延时毫秒的函数适用于任何 Cortex-M内核的MCU。

    2.2K20

    Linux中断 - IDT

    [toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表定义的行为来处理对应的中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...IDT 中断描述符表本身的存储 IDT 中断描述符表的物理地址存储在IDTR寄存器,这个寄存器存储了IDT的基地址和长度。...传统系统调用相关 IDT 的设置 Linux系统启动过程内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

    6.6K10

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断的处理过程。...注册中断处理入口 在内核,可以通过 setup_irq() 函数来注册一个中断处理入口。...一般中断 上半部 只会做一些最基础的操作(比如从网卡复制数据到缓存),然后对要执行的中断 下半部 进行标识,标识完调用 do_softirq() 函数进行处理。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现的,在Linux内核,有一个名为 softirq_vec 的数组,如下: static struct softirq_action...但在Linux只定义了四种softirq,如下: enum { HI_SOFTIRQ=0, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, TASKLET_SOFTIRQ

    6.6K20

    python延时函数_python延时函数

    sleepsleep(5)#sleep 5s print ‘sleep end’… 在日常的开发,往往会遇到这样的需求,需要某一个函数在一段时间之后才执行以达到某种特定的效果。...map是将某个函数逐一作用于列表的每个元素。 reduce则先从列表取头2个元素,传到指定函数,然后将计算结果与余下元素依次重复,直到list处理完。...1.1 map示例:(将list的所有元素*10)def fn_map(x… python的sleep函数可以传小数进去,然后就可以进行毫秒级的延时了# 例1:循环输出休眠1秒import timei...使用cython、ctypes技术封装,即能实现了低延时的要求,又能兼容python语言的易用性。 经过严格测试,algoplus从策略触发交易信号到调用c++方法,延时只有40微秒左右。...事实上,linux 并没有原生的线程,线程是通过进程实现的。 python 每一个进程会启动一个解释器,而线程会共享一个解释器。 python 的线程是通过标准库 threading 实现的。

    7.4K20

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....将中断号压入栈; (不同中断号的中断对应不同的中断服务程序入口) 2....中断处理的这几个阶段不能调用可能导致睡眠的函数(包括分配内存); 对于第一个问题, 较新的linux内核增加了ksoftirqd内核线程, 如果持续处理的softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux), 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    7.4K80

    实时系统Preempt RT与Xenomai之争!谁更主流,谁更实时

    主流的实时Linux方案是基于Preempt RT的单内核方案,通过最大限度地提高Linux内核的可抢占部分,使Linux本身具备实时性。下图为Premept RT单内核原理图。...另外一点是系统拿到中断后,在用户空间的应用响应延时是对应用最有意义的。 在用户空间的测试结果,Xenomai和Preempt RT最坏延时都在90-95微秒左右。...当在Linux系统只使用单核测试时,Preempt RT最坏的延时只有大约80微秒,结果优于Xenomai。...在Kernel空间延时的测试结果,Xenomai最高延时在30微秒,单核运行Preempt RT的最高延时60微秒。...如果使用FIQ快速中断的话,Preempt RT的最坏延时也可达到30微秒,平均延时甚至到达10微秒

    27010

    用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)

    概述 在使用 DHT11 的时候,时序通信需要微秒来操作,STM32CubeMX 自带一个系统时钟,但是实现的是毫秒级别的。因此就自己用通用计时器实现一个。...STM32F4xx中文参考手册中找到,TIM2 在外设总线1(APB1上),因此其时钟为 84MHz,如下图所示: 2.计数器时钟频率及计数模式 除了配置定时器的时钟,还需要配置计数器时钟频率,我们要实现微秒延时...,因此计数器时钟频率应该是1MHz, 而要实现还需要以下3个参数: 预分频系数 根据STM32F4xx中文参考手册的时钟频率计算,如下图所示: 其中fCK_PSC就是通用定时器框图中的CK_PSC...,就减一,一直减到 0 自动重装载值 虽然我们并不使用自动重装载功能,但是,我们还是要对自动重装载寄存器进行赋值且不赋值为0即可,但是我测试时发送,如果为1,延时会出现偏差,因此这里赋值为 2,依据如下...: 3.打开定时器中断 4.具体实现代码 volatile bool elapsed = false; //用于判断设置的计数值是否耗尽(向下计数模式),耗尽时,在中断中奖会设置为true void

    2.7K30

    linux 中断机制《Rice linux 学习笔记》

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...dev:与request_irq的参数dev必须一致,将request_irq指定的dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层的读,不管什么情况下,都会返回。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。

    4.7K10

    linux内核缺页中断处理

    缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令的各种状态信息保存在特殊的cpu寄存器。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...9.调度引发缺页中断的进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...), "=r" (x) : "m"(__m(addr)), "i"(errret), "0"(err)) //"m"(__m(addr)), "i"(4), "0"(4)) 经过以上分析,对linux

    10.7K22

    Linux内核硬中断中断的原理和实现

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...的__softirq_pending是等待处理的软中断的位图,通过设置此变量即可告诉内核该执行哪些软中断。...在ksoftirqd内核线程 c. 在那些显示检查和执行待处理的软中断的代码,如网络子系统 而不管是用什么方法唤起,软中断都要在do_softirq()执行。...如果有待处理的软中断,do_softirq()会循环遍历每一个,调用它们的相应的处理程序。 在中断处理程序触发软中断是最常见的形式。

    22.2K21

    Linux中断虚拟化(一)

    作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...因此,在本章,我们简单介绍硬件中断的基本原理,然后结合中断的基本原理讨论如何虚拟化中断芯片。...中断芯片可以在用户空间中模拟,也可以在内核空间模拟,但是因为中断芯片需要密集地和Guest以及内核的KVM模块交互,显然在内核空间模拟更合理,所以KVM在内核实现中断芯片的模拟。

    6.4K30
    领券