上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 38 下一页
摘要: 给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 你的目标是到达最后一个下标,并且使用最少的跳跃次数。 例如: A=[2,3,1,1,4],到达最后一个下标的最少跳跃次数为 2。(先跳跃 1 步,从下标 0 到 1,然后跳跃 3 步,到达 阅读全文
posted @ 2017-09-18 23:59 诺谦 阅读(3532) 评论(0) 推荐(2) 编辑
摘要: 在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机制、异步通知、同步互斥/非阻塞、定时器去抖动。 其中驱动框架如下: 1)写file_operations结构体的成员函数: .open()、.read()、.write() 2)在入口函数 阅读全文
posted @ 2017-09-18 14:43 诺谦 阅读(24419) 评论(9) 推荐(19) 编辑
摘要: 本节目标: 通过定时器来防止按键抖动,测试程序是使用上节的:阻塞操作的测试程序 1.如下图所示,在没有定时器防抖情况下,按键没有稳定之前会多次进入中断,使得输出多个相同信息出来 2.按键波形图,如下所示: 3.如何消去按键抖动 通过定时器延时10ms,然后每当按键进入中断时就更新定时器延时10ms, 阅读全文
posted @ 2017-09-14 18:29 诺谦 阅读(7668) 评论(0) 推荐(3) 编辑
摘要: 本节目标: 通过DMA,无需中断,接收不定时长的串口数据 描述:当在串口多数据传输下,CPU会产生多次中断来接收串口数据,这样会大大地降低CPU效率,同时又需要CPU去做其它更重要的事情,我们应该如何来优化?比如四轴飞行器,当在不停地获取姿态控制方向时,又要去接收串口数据.答:使用DMA,无需CPU 阅读全文
posted @ 2017-09-14 00:07 诺谦 阅读(48743) 评论(18) 推荐(12) 编辑
摘要: 本节目标: 当设备被一个程序打开时,存在被另一个程序打开的可能,如果两个或多个程序同时对设备文件进行写操作,这就是说我们的设备资源同时被多个进程使用,对共享资源(硬件资源、和软件上的全局变量、静态变量等)的访问则很容易导致竞态。 显然这不是我们想要的,所以本节引入互斥的概念:实现同一时刻,只能一个应 阅读全文
posted @ 2017-09-13 16:07 诺谦 阅读(4320) 评论(0) 推荐(4) 编辑
摘要: 之前学的应用层都是: 1)查询方式:一直读 2)中断方式.同样一直读,直到中断进程唤醒 3)poll机制:一直在poll函数中睡眠,一定时间读一次 以上3种,我们都是让应用程序主动去读,本节我们学习异步通知,它的作用就是当驱动层有数据时,主动告诉应用程序,然后应用程序再来读, 这样,应用程序就可以干 阅读全文
posted @ 2017-09-12 10:28 诺谦 阅读(3911) 评论(0) 推荐(2) 编辑
摘要: 本节继续在上一节中断按键程序里改进,添加poll机制. 那么我们为什么还需要poll机制呢。之前的测试程序是这样: 在没有poll机制的情况下,大部分时间程序都处在read中休眠的那个位置。如果我们不想让程序停在这个位置,而是希望当有按键按下时,我们再去read,因此我们编写poll函数,测试程序调 阅读全文
posted @ 2017-09-12 10:01 诺谦 阅读(8128) 评论(3) 推荐(5) 编辑
摘要: request_irq()和free_irq()分析完毕后,接下来开始编写上升沿中断的按键驱动 如下图,需要设置4个按键的EINT0, EINT2, EINT11, EINT19的模式为双边沿,且设置按键引脚为中断引脚 这里我们只需要使用request_irq函数就行了, 在request_irq函 阅读全文
posted @ 2017-09-11 20:07 诺谦 阅读(9968) 评论(0) 推荐(5) 编辑
摘要: 上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq()来向内核申请注册中断 本节目标: 分析request_irq()如何申请注册中断,free_irq()如何注 阅读全文
posted @ 2017-09-11 19:43 诺谦 阅读(15463) 评论(0) 推荐(4) 编辑
摘要: 本节目标: 分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2.cpu发生中断, 3.强制跳到异常向量入口执行(0x18中断地址处) 3.1使用stmdb将寄存器值保存 阅读全文
posted @ 2017-09-11 19:19 诺谦 阅读(9360) 评论(1) 推荐(4) 编辑
上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 38 下一页