摘要:
1 中断概念 参考T6 一句话,中断上半部要求快进快出,耗时操作则可放在中断下半部执行 下半部实现方式: 软中断 tasklet 工作队列 内核定时器,也可以将工作退后一段时间(精准的)执行 2 tasklet tasklet是中断处理下半部最常见的一种方式,驱动程序一般先申请中断,在中断处理函数内 阅读全文
posted @ 2021-08-05 23:59
MHDSG
阅读(110)
评论(0)
推荐(0)
摘要:
1 阻塞与非阻塞 阻塞I/O与非阻塞I/O是设备访问的两种不同模式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。 阻塞操作:指的是执行设备操作的时候如果不能获得资源,那么就挂起进程直到满足操作条件之后再进行操作。被挂起的进程进而进入休眠状态,被调度器移走,直到能够获取资源后才继续执行 非阻 阅读全文
posted @ 2021-08-05 23:58
MHDSG
阅读(76)
评论(0)
推荐(0)
摘要:
1 为什么需要并发控制 以T10案例代码为例,我们在内核中申请了一片缓冲区,假设此刻有2个及以上进程同时来访问这个内核驱动,而且二者同时执行到了下述代码区,那么此刻内核将会拷贝2个用户空间的数据到一个缓冲区,假设进程A刚好拷贝了一半数据到内核buffer后进程B也拷贝部分数据给内核buffer, 阅读全文
posted @ 2021-08-05 23:58
MHDSG
阅读(87)
评论(0)
推荐(0)
摘要:
1 linux字符驱动设备开发流程 1.1 流程 封装自己的字符设备结构体类 实现struct file_operations结构体 模块的入口函数 实例化自己的字符设备结构体类(实例化对象),使用kmalloc 初始化通用字符设备(cdev_init) /* 功能:初始化字符设备 参数: @cde 阅读全文
posted @ 2021-08-05 23:57
MHDSG
阅读(109)
评论(0)
推荐(0)
摘要:
1.输入子系统概念 1.1输入设备 输入设备如按键,鼠标,触摸屏,游戏遥感等均是输入设备 如果没有输入子系统的话,那么针对不同的屏幕将会写不同的代码,但其操作模式是一样的,那么将会写很多重复代码.明显比较麻烦 输入子系统的出现就是实现操作与硬件分离,针对不同型号的屏幕采用同一套通用方法 总之一句话, 阅读全文
posted @ 2021-08-05 23:55
MHDSG
阅读(225)
评论(0)
推荐(0)
摘要:
1.回顾 1.1字符设备驱动开发步骤 首先要实现模块加载(xxx_init())与卸载函数(xx_exit())函数 之后申请设备号(register_chrdev_region()) 注册字符设备驱动,cdev_alloc(),cdev_init(),cdev_add() 使用udev/mdev机 阅读全文
posted @ 2021-08-05 23:54
MHDSG
阅读(69)
评论(0)
推荐(0)
摘要:
1.设备驱动模型 1.1由来 在之前的字符设备驱动编程模型里面主要有以下几步 1.首先要实现入口函数xxx_init()和卸载函数xxx_exit() 2.申请设备号register_chrdev 3.创建设备节点,如class_create,device_create 4.硬件部分初始化,如io资 阅读全文
posted @ 2021-08-05 23:53
MHDSG
阅读(192)
评论(0)
推荐(0)
摘要:
1.中断设备树 1.1概述 在linux内核中通过中断号管理中断,与外设一一对应 中断发生后会有中断回调函数,在linux中通过``函数处理中断 外围设备大部分会产生中断,soc为了方便管理与区分中断,故设计了中断控制器GIC(**Generic Interrupt Controller **),用 阅读全文
posted @ 2021-08-05 23:48
MHDSG
阅读(170)
评论(0)
推荐(0)
摘要:
1.设备树 1.1设备树引入背景 Linux社区的大牛们参考了PowerPC等体系架构中使用的Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码 设备树是一种描述硬件的数 阅读全文
posted @ 2021-08-05 23:44
MHDSG
阅读(190)
评论(0)
推荐(0)
摘要:
1.驱动分类 1.1字符设备 1.1.1特点 数据为字符流,数据从寄存器产生 传输数据少而快 如LCD屏,keyboard,IIC等 1.1.2上层调用方式 上层应用以文件描述符形式打开驱动,如open,read,write 上层每调用某函数,在驱动层面都有相应接口函数,如上层open对于底层xxx 阅读全文
posted @ 2021-08-05 23:43
MHDSG
阅读(98)
评论(0)
推荐(0)
摘要:
1.ko模块传参 1.1概念 之前在装载驱动时候使用insmod hello_driver.ko指令,实际上该指令可以传递参数 传参示例insmod hello_driver.ko myname="makabaka" val=22 通过传参可以向驱动里面传入参数,驱动可对参数做相应处理,这点类似函数 阅读全文
posted @ 2021-08-05 23:39
MHDSG
阅读(205)
评论(0)
推荐(0)
摘要:
1.驱动代码 1.1头文件 #include <linux/init.h> #include <linux/module.h> 1.2装载与卸载函数声明 当生成的.ko文件被装载的时候,内核会调用module_init函数,向系统申请资源 当生成的.ko文件被卸载的时候,内核会调用module_ex 阅读全文
posted @ 2021-08-05 23:38
MHDSG
阅读(82)
评论(0)
推荐(0)
摘要:
1. java数组 java数组合法的写法 方式一:int a[] = {1, 2, 3};,直接声明,无需new 方式二:int b[] = new int[3];,需自己开辟 方式三:int[] c = new int[3];,java数组的规范写法 package clc; import ja 阅读全文
posted @ 2021-08-05 23:35
MHDSG
阅读(56)
评论(0)
推荐(0)
摘要:
1.catch异常 1.1概念 异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失 1.2格式 异常格式 try{ 异常语句; }catch(Exception e){ }finally{ 一定会执行的代码; } 实例 package com.h 阅读全文
posted @ 2021-08-05 23:34
MHDSG
阅读(212)
评论(0)
推荐(0)
摘要:
1.多态性 1.1多态性体现 方法重载与重写 对象多态性 向上转型:程序会自动完成 父类 父类对象 = 子类实例 向下转型:强制类型转换 子类 子类对象 = (子类)父类实例 向上转型示例 package com.hanqi.duotai; class A{ public void tell 阅读全文
posted @ 2021-08-05 23:34
MHDSG
阅读(61)
评论(0)
推荐(0)
摘要:
1.Object类 1.1概念 在java中Object类是所有java类的根基类,是所有类的老祖宗 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,例如 public class Persion{ } //等价于 public class Persion exte 阅读全文
posted @ 2021-08-05 23:33
MHDSG
阅读(75)
评论(0)
推荐(0)
摘要:
1.String字符串 1.1实例化String对象 直接赋值(推荐使用) 使用关键字new,因为String本身就是个对象 示例 package com.hanqi.string; public class test01 { public static void main(String[] arg 阅读全文
posted @ 2021-08-05 23:32
MHDSG
阅读(43)
评论(0)
推荐(0)
摘要:
1.final关键字 1.1概念 final关键字在java中被称为完结器,表示最终的意思 final能声明类,方法,属性 1.2注意 使用final声明的类不能被继承,类似被打上final标签的类就是太监,不能有子孙后代 使用final声明的方法不能被重写 使用final声明的变量变成常量,常量是 阅读全文
posted @ 2021-08-05 23:31
MHDSG
阅读(166)
评论(0)
推荐(0)
摘要:
1.java引用传递 1.1定义 类似于C中的函数之间传递指针,直接通过指针操作内存 java示例 package com.hanqi.test; class Ref1{ int temp = 10; } public class test01 { public static void main(S 阅读全文
posted @ 2021-08-05 23:30
MHDSG
阅读(53)
评论(0)
推荐(0)
摘要:
1.方法进阶 1.1方法定义 基本同C差不多,只是在方法类型之前多了修饰符如public,private等 返回值同C一样,有啥返回值就定义啥类型方法 1.2方法重载 从此处开始方法将与C存在较大差别 重载定义:方法名相同,但是参数的类型和个数不同,通过传递参数的个数和类型不同来完成不同功能(区分不 阅读全文
posted @ 2021-08-05 23:29
MHDSG
阅读(59)
评论(0)
推荐(0)
摘要:
1.java数据类型 1.1基本数据类型 byte(1Byte) short(2Byte) int(4Byte) long(8Byte) float(4Byte) double(8Byte) char(1Byte) boolean(1Byte或4Byte) 1.2引用数据类型 1.3自定义数据类型 阅读全文
posted @ 2021-08-05 23:28
MHDSG
阅读(68)
评论(0)
推荐(0)
摘要:
1.static 静态变量与静态方法都是在类从磁盘中加载至内存后被创建的,与类同时存在,同时消亡 静态变量又称类的成员变量,在类中是个全局变量,可以被类中的所有方法调用 静态变量的值有JVM自动初始化,默认为0或null 2.方法 2.1概念 方法代表一段代码,java的代码通常都封装在方法中,例如 阅读全文
posted @ 2021-08-05 23:28
MHDSG
阅读(63)
评论(0)
推荐(0)
摘要:
1.项目概述 1.1项目概述 本项目基于linux系统编程实现,使用了linux文件操作与网络编程等技术 采用C/S模式设计,服务器与客户端可相互发送任意大小文件,支持一些常用指令查看文件,如ls,cd,pwd等 1.2大体实现方法 由于需要传输大文件,因此需要将文件分包传输 本项目采用UDP协议传 阅读全文
posted @ 2021-08-05 23:26
MHDSG
阅读(67)
评论(0)
推荐(0)
摘要:
1.多任务特性 1.1任务调度机制 时间片任务调度机制:所有任务优先级相同,给每个任务分配一个时间片,该任务在指定时间片内部执行 前面在配置的时候有一个任务优先级数量的概念,即configMAX_PRIORITIES,该数量受MCU内存限制,数量越多,占用内存越高 RTOS为实时操作系统,所以必须支 阅读全文
posted @ 2021-08-05 23:24
MHDSG
阅读(238)
评论(0)
推荐(0)
摘要:
1.消息队列概念及其应用 1.1定义 消息队列可在任务与任务之间,中断与任务之间传递消息 实现任务接收来自于其他任务或者中断的不定长度的消息 1.2消息队列工作原理 消息队列由消息控制块,队头,队尾构成 消息只能从队尾进入,队头出 2.消息队列控制块 2.1组成与各模块作用 pcHead,队列头指针 阅读全文
posted @ 2021-08-05 23:23
MHDSG
阅读(48)
评论(0)
推荐(0)
摘要:
1.概念及其应用 1.1定义 类似闹钟,可突破硬件定时器数量限制,实现很多定时器 1.2FreeRTOS软件定时器原理 单次执行:启动软件定时器,设定定时时间为100ms,当100个tick值到达后就执行相关操作再关闭 循环执行:启动软件定时器,设定定时时间为100ms,当100个tick值到达后就 阅读全文
posted @ 2021-08-05 23:21
MHDSG
阅读(79)
评论(0)
推荐(0)
摘要:
1.多任务调度基础 1.1Cortex-M0中Systick重要性 系统滴答定时器就是为操作系统诞生的,是调度器的核心 1.2Cortex-M0中断管理 当异常或者中断发生的时候,处理器会把PC设置为一个特定的地址(存在于flash里面),这一个地址被称为异常向量,每一类异常源都对应一个特定的入口地 阅读全文
posted @ 2021-08-05 23:20
MHDSG
阅读(296)
评论(0)
推荐(0)
摘要:
1.配置文件作用 使用配置文件来裁剪freeRTOS的功能,进行个性化配置 使用CubeMX的话,ST公司已经默认配置好了环境 2.配置文件详解 2.1配置文件 参考文章 此处选用freeRTOS官方例程下面的配置文件FreeRTOSConfig.h /* * FreeRTOS Kernel V10 阅读全文
posted @ 2021-08-05 23:19
MHDSG
阅读(264)
评论(0)
推荐(0)
摘要:
1.实现串口任务打印 1.1业务流程 USART1初始化 静态创建任务 注意:创建静态任务必须将Memory Allocation设置为Dynamic/static模式,即使能动态/静态内存 printf重定向,在usart.c下添加如下代码即可 /* USER CODE BEGIN 1 */ in 阅读全文
posted @ 2021-08-05 23:17
MHDSG
阅读(321)
评论(0)
推荐(0)
摘要:
1.环境搭建 STM32CubeMX keil5 stm32f103zet6 2.点亮RTOS的第一盏灯 打开STM32CubeMX新建工程并选择MCU型号为stm32f103zet6 通过查找电路图发现灯的引脚为PB5,先将PB5配置为输出模式,因为按照电路图设计,当该引脚为低电平时候,灯被点亮, 阅读全文
posted @ 2021-08-05 23:13
MHDSG
阅读(254)
评论(0)
推荐(0)
摘要:
官方API 1.动态创建任务 #include "FreeRTOS.h" #include "task.h" /* 功能:动态创建一个任务,所需的RAM会自动从FreeRTOS堆中分配 参数: 参数1:任务实现函数指针(函数名) 参数2:任务名称(字符串) 参数3:任务堆栈大小,单位为字 参数4:任 阅读全文
posted @ 2021-08-05 23:10
MHDSG
阅读(102)
评论(0)
推荐(0)

浙公网安备 33010602011771号