`
文章列表

GPIO学习笔记

用汇编点亮一个led 1看原理图GPK4=0,led亮GPK4=1,led灭 2怎么让GPK4输出高低电平(看芯片手册,操作寄存器实现) 配置功能:输入/输出/其他 设置其输出高/低电平 3查看芯片手册 GPK4[19:16] 0000=Input 0001=Output 0010=HostI/FDATA[4] 0011=HSITXREADY 0100=Reserved 0101=DATA_CF[4] 0110=Reserved 0111=Reserved GPKDAT在第4位写写0就对应GPK4 GPK[15:0][15:0] Whentheportisconfi ...
竟争与互斥 程序调试 1 打印调试信息 printk 定义全局打印 示例代码如下: #ifdef PDEBUG #define PLOG(fmt,args...) printk(KERN_DEBUG "scull:",fmt,##args) #else /*do nothing*/ #define PLOG(fmt,args...) #endif 在makefile中定义PDEBUG的值 示例代码如下: DEBUG ...
memdev.h文件示例代码如下: #ifndef _MEMDEV_H #define _MEMDEV_H //采用静态分配设备号 #ifndef MEMDEV_MAJOR #define MEMDEV_MAJOR 260 #endif #ifndef MEMDEV_NR_DEVS #define MEMDEV_NR_DEVS 2 #endif #ifndef MEMEV_SIZE #define MEMDEV_SIZE 4096 #endif struct mem_dev{ char *data; unsigned long size; }; #endif memdev.c文件示例代码如下: ...
字符驱动程序 1 设备号 字符设备通过字符设备文件来存取 ls -l 如果输出的第一列是c标识,说明该文件是字符设备文件 设备文件项中的两个数分别为 主设备号/次设备号 设备文件与设备驱动通过主设备号建立联系 次设备号用来分辩操作的哪个设备 dev_t 用来描述设备号 在linux/types.h中声明,示例代码如下:typedef __u32 __kernel_dev_t;typedef __kernel_fd_setfd_set;typedef __kernel_dev_tdev_t; 实质为unsigned int 32位整数,高难12位为主设备号,低12位为次设备号 #主设备号 MAJO ...
linux 驱动程序 字符设备驱动程序 网络接口驱动程序 块设备驱动 字符设备 按字节来访问的设备 字符设备驱动用来驱动字符设备 通常实现open close read write 块设备 unix系统一次传输一个或多个512字节 linux允许块设备传送任意数目的字节 字符设备驱动和块设备驱动哪个可以随机访问 网络接口 通常是一个硬件设备(etho),也可以是一个;软件设备如回环接口(lo) 驱动程序的安装 1 模块方式 2 直接编译进内核 1 将程序复制到内核当中drivers/char [root@localhost char]# cp /opt/linux/examples/hello/ ...
linux 进程管理 1 linux进程控制 进程的四个要素: 有一段程序供其执行 有专用的内核空间椎栈 内核中有一个tash_struct数据结构 有独立的用户空间 task_struct中包含了描述进程和线程的信息 pid_t pid 进程号 最大10亿 volatile long state 进程状态 TASK_RUNNING 准备就绪 TASK_INTERRUPTIBLE 处于等待中 等待条件为真是唤醒,信号/中断也可TASK_UNINTERRUPTIBLE 条件为真是唤醒,信号/中断不可TASK_STOPPED 进程中止执行(SIGSTOP/SIGTSTP时进入该状态) SIGCONT ...
在项目文件下,自动生成了文件:proguard-project.txt, project.properties两个文件,于是打开这两个文件,在proguard-project.txt中有: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for. ...
1 linux内存管理 地址类型 物理地址 出现在cpu地址总线上的寻址物理内存的地址信号,是地址变换的最终结果 线性地址(虚拟地址)在32位cpu架构下,可以表示4g的地址空间,用16进制表示就是 0x00000000到0xffffffff 逻辑地址程序代码编译后,出现在汇编程序中的地址 地址转换 cpu将一个逻辑地址转换为物理地址: 利用段式内存管理单元,将逻辑地址转换成线性地址 再利用页式内存管理单元,将线性地址转换成物理地址 段式管理(16位cpu)有20位的地址线,1m的内存空间,由于寄存器只有16位,只能访问65536个存储单元,64k 因此cpu采用了内存分段的管理模式,cpu ...
嵌入式linux内核制作 1 清除原有配置文件与中间文件 x86 make distclean arm make distclean 2 配置内核 x86 make menuconfig arm make menuconfig ARCH=arm 3 内核编译 x86 make bzImage arm make uImage ARCH=arm CROSS_COMPILE=arm-linux- 根文件系统的制作 1 创建目录和文件 mkdir rootfs cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var mkdir usr/ ...
...
混合编程 常见方式: 1 在c/c++程序中嵌入汇编指令 语法格式:__asm{ 汇编语言程序 } 2 在汇编程序中访问c/c++定义的全局变量 示例代码如下: test.c #include <stdio.h> int gVar_1=12; extern asmDouble(void) int main(void){printf("original value of gVar_1 is %d",gVar_1);admDouble();printf("modified value of gVar_1 is %d",gVar_1);retur ...
arm伪指令 符号定义伪指令 定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名 定义全局变量 gbla(全局数字变量,初始化值为0)GBLA 全局变量名 示例代码如下:GBLA Test1;定义全局数字变量test1Test1 SETA 0x123;将该变量赋值为0x12 ...
画个草图也挺过瘾
多线程程序设计 头文件:pthread.h 连接时需要用到的库文件:libpthread.a 创建线程 函数原型 #include <pthread.h> int pthread_creat(pthread_t *tidp,const pthread_attr_t *attr,void *(*start_rtn)(void),void *arg) tidp:线程id attr:线程属性 start_trn:线程要执行的函数 arg: start_rtn的参数 编译 由于pthread库不是linux系统的库,编译时要加上-lpthread 示例代码如下: gcc filename - ...
信号量 又名信号灯,保护临界资源,进程可以根据它判断是否能够访问某些共享资源 除了用于访问控制外,还用于进程同步 分类: 二值信号量 值只能取0或1,有点像互斥锁 计数信号量 信号量的值可以取任意非负值 创建/打开 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(key_t key,int nsems,int semflg) key:键值,由ftok取得 nsems:指定信号灯的数目 semflg:标识,同消息队列 对信号量进行控制 int semop(in ...
Global site tag (gtag.js) - Google Analytics