嵌入式S3C2440&汇编&51
文章平均质量分 75
【ql君】qlexcel
万物皆为比特
展开
-
不确定函数参数个数时的处理,va_start和va_end使用详解
引出 在C中,当我们无法确定函数的所有实参的类型和数目时,可以用省略号指定参数表来处理,如:void foo(...);void foo(parm_list,...); 具体怎么使用呢,我们首先需要把函数参数的传递原理说清楚。函数参数的传递原理 函数参数传递的时候是从右至左依次入栈的,然后调用的时候再依次出栈。先入栈的在栈底,后入栈的在栈顶。在内存中,栈底是高地址,栈顶是低地址。 举个例子如下:void func(int x, float y, char z); 调用此原创 2021-07-23 14:59:00 · 828 阅读 · 0 评论 -
51单片机中变量的存储 xdata bdata idata pdata区别
先来看data、bdata、idata、pdata、xdata、code指代的意思。然后我们对应到51单片机的存储空间:从上面可以知道:1、51的存储空间分为指令空间和数据空间,他们独立编址。指令空间是flash,用来存程序。数据空间是ram,用来存数据。2、数据空间又分为内部数据空间(IRAM)和外部数据空间(XRAM),他们的大小和访问速度有原创 2017-12-02 19:04:39 · 5474 阅读 · 0 评论 -
51单片机的工作寄存器R0~R7位于内部RAM什么位置
转自:https://zhidao.baidu.com/question/1495509806096353459.html51单片机的工作寄存器一共有32个,为RAM中的00H--1FH单元,分为4组,分别是0组:00H--07H单元、1组:08H--0FH单元、2组:10H--17H单元、3组:18H--1FH单元, 每组的8个单元分别对应R0--R7。这四组中只有一组是当前工作转载 2017-11-16 16:39:45 · 26096 阅读 · 0 评论 -
Linux内核移植
以下内容大部分来自《嵌入式Linux应用开发完全手册》1.1内核启动过程概述 如图是Linux内核的vmlinux启动过程。之所以强调是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些独特的操作。比如压缩格式的内核zImage,它首先进行自解压得到vmlinux,然后执行vmlinux,开始“正常的”启动流程。 第一阶段:引导原创 2016-06-06 20:02:10 · 546 阅读 · 0 评论 -
U-Boot常用命令
图片内容来自《嵌入式Linux应用开发完全手册》1.帮助命令help2.下载命令使用方法举例:0x30000000表示文件下载后存放的内存地址;3.内存操作命令4.NOR Flash操作命令5.NAND Flash操作命令eg:nand erase 0xA00000 0x原创 2016-06-05 15:37:16 · 539 阅读 · 0 评论 -
USB驱动程序移植
USB驱动程序分为两类:USB主机控制器驱动程序(Host Controller Drivers)、USB设备驱动程序(USB device drivers)。它们在内核中的层次为: USB主机控制器驱动程序 提供访问USB设备的接口,它只是一个“数据通道”,至于这些数据有什么作用,这要靠上层的USB设备驱动程序来解释。 USB设备驱动程序 使用下层驱动提供原创 2016-06-10 22:36:48 · 747 阅读 · 0 评论 -
韦东山 文件系统映像,mount挂接文件系统
cd /work/nfs_rootmkdir tmpcp fs_mini_mdev.tar.bz2 tmp/cd tmp/tar xjf fs_mini_mdev.tar.bz2 把光盘上linux/tools里的mkyaffs2image工具拷到服务器的/work/tools目录里。cd /work/toolscp mkyaffs2image /bin/chmod原创 2016-06-10 18:53:49 · 1277 阅读 · 0 评论 -
LCD驱动程序移植
对LCD的操作可以像串口一样,通过终端设备层的封装(/dev/tty*设备)来输出内容,也可以通过frame buffer(/dev/fb*设备)直接在显存上“绘制”图像。tty(终端设备)和frame buffer驱动程序的框架:下面根据每层的文件讲解一下上图:1)显示驱动程序2)键盘驱动程序2.操作实例1)对/dev/tty*调用原创 2016-06-10 14:38:04 · 1770 阅读 · 0 评论 -
Linux内核Makefile
顶层Makefile根据不同的平台,对各类target分类并调用相应的规则Makefile生成目标.config内核配置文件arch/$(ARCH)/Makefile具体平台相关的Makefilescripts/Makefile.*通用规则文件,面向所有的Kbuild Makefiles,所原创 2016-06-05 10:52:55 · 2476 阅读 · 0 评论 -
汇编中AREA和ENTRY理解
1、AREA 语法格式: AREA 段名 属性1 ,属性2 ,…… AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来,如:|1_test| 。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下: — CODE 属性:用于定义代码段,默认为转载 2017-12-14 09:53:11 · 741 阅读 · 0 评论 -
STM32启动文件分析
在>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器。比如,如果你用的转载 2017-12-14 11:10:28 · 483 阅读 · 0 评论 -
使用了SDRAM,使用了分散加载文件,出现HardFault_Handler
使用SDRAM之后,SDRAM可能当做数据区来使用。如果采用了分散加载文件的方式,SDRAM要是被划分为数据区,在调用main函数之前必须进行初始化。否则会出现HardFault_Handler。因为使用到了SDRAM中的地址,而此时SDRAM还没有初始化,因此出现地址越界。可以在启动代码中初始化:Reset_Handler PROC EXPORT R原创 2018-01-31 11:40:38 · 1253 阅读 · 0 评论 -
emwin生成c文件格式的汉字库,GB2312编码,模拟器可用
要生成c文件格式的汉字库,可以使用官方提供的FontCvt软件,但是这个软件不支持GB2312编码,生成的字库是Unicode的。要使用,就得把C文件转换成UTF-8编码的,同时还要用GUI_UC_SetEncodeUTF8()来使能UTF-8编码,有点麻烦。 那么有没有直接生成GB2312编码的汉字库的软件呢?有的,就是ucGUI-gb2312汉字生成器,百度下...原创 2019-07-08 18:38:12 · 1599 阅读 · 0 评论 -
AMBA、AHB、APB、AXI总线介绍和对比
一、引出 研究STM32H7的总线系统,对AXI、AHB、APB、ASB有点兴趣,于是去简单了解了一下,总结如下: 说到AXI、AHB、APB、ASB就得先说AMBA(Advanced Microcontroller Bus Architecture高级处理器总线架构),它是ARM推出的一种片上总线标准,AMBA规范主要包括了:AHB (Adva...转载 2019-06-14 20:37:37 · 9894 阅读 · 0 评论 -
USB 2.0 全速 FULL SPEED 和高速 HIGH SPEED 的区别
2003年6月份,USB协会重新命名了USB的规格和标准,新命名的USB标准将原先的USB1.1的称呼改成了“USB 2.0 Full Speed”(全速版),同时将原有的USB2.0改成了“USB2.0 High-Speed”(高速版),并同时公布了新的标识。 因此USB2.0 High Speed:即高速USB2.0,理论速度是480Mbps,60MB/s,对...转载 2019-05-05 21:57:16 · 4528 阅读 · 0 评论 -
FATFS配置长文件名,为何跟编码转换有关
要打开FATFS的长文件名功能,必须添加OEMCP与Unicode的编码转换函数,同时也就要把OEMCP与Unicode的编码转换数组添加进来,这是为什么呢? OEMCP在936代码页下就是GBK,这个编码转换也就是GBK和Unicode互转。FATFS是使用的GBK编码,文件的短文件名也是GBK编码,因此不需要转换,可是文件的长文件名使用的UTF-16编码,这是...原创 2018-12-02 16:40:58 · 2582 阅读 · 0 评论 -
ANSI编码和标准代码页(code page)
电脑最先是美国人发明出来开始使用的,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母、数字和常用特殊符号已经绰绰有余了(其实ASCII只用了前127个编码)于是他们使用ASCII编码,后来传到欧洲地区,法国人在小写字母加上变音符号(如:é),德国人又需要加几个字母(Ä ä、Ö ö、Ü ü、ß)。于是,欧洲人就将ASCII没用完的编码(128-255)为自己特有的符号...原创 2018-12-02 16:01:40 · 5789 阅读 · 0 评论 -
电容式触摸屏原理
一、电容屏工作原理由上图可知,电容屏控制芯片周期性产生驱动信号,然后被接收电极接收,测量电荷大小。当电容屏被按下时,相当于为电极引入了新的电容,从而改变了接收电极测量的电荷大小。二、电容屏的结构1、单层ITO优点:成本低,透光率高。 缺点:抗干扰能力差2、单面双层ITO优点:性能好,良率高 缺点:成本较高3、双面单层ITO...转载 2018-11-03 15:20:55 · 39350 阅读 · 1 评论 -
lcd参数解释及刷新率计算,LCD时序
一、LCD显示图像的过程如下:其中,VSYNC和HSYNC是有宽度的,加上后如下:参数解释:HBP(Horizontal Back Porch)水平后沿:在每行或每列的象素数据开始输出时要插入的象素时钟周期数HFP(Horizontal Front Porch )水平前沿:在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数VBP(Vertical Back ...原创 2018-09-21 20:16:07 · 12763 阅读 · 0 评论 -
几种USB控制器类型:OHCI,UHCI,EHCI,XHCI
转载自:http://smilejay.com/2012/10/usb_controller_xhci/ 遇到过一些关于USB的东西(如下),一直没搞明白什么USB1.0/1.1/2.0/3.0之类的,当然我知道它们的各自传输速度都在提升,本文就做点简单的记录吧,尽量下载看到USB的东西和别人提及USB的术语时不要再迷茫了。1. 曾经遇到一些Linux系统对USB3.0的支持不完善,从而...转载 2018-07-28 11:36:41 · 1189 阅读 · 0 评论 -
Linux内核源码结构
引用点击打开链接Linux内核文件数目将近2万,除去其他架构CPU的相关文件,支持S3C2410、S3C2440这两款芯片的完整内核文件有1万多个。这些文件的组织结构并不复杂,它们分别位于顶层目录下的17个子目录,各个目录功能独立。arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。Linux内核目前已经支持转载 2016-06-04 19:29:56 · 522 阅读 · 0 评论 -
SD卡驱动程序移植
1.内核MMC/SD驱动程序框架内核drivers/mmc目录下有3个子目录:card/、core/和host/,这刚好表示了MMC/SD驱动程序的3个层次,如下:1)区块层 向文件系统层、用户空间提供文件操作的接口,主要文件是card/目录下的block.c,queue.c向它提供了几个函数来操作队列。 区块层调用core/目录下的core.c、sysfs.c提供原创 2016-06-10 08:56:30 · 860 阅读 · 0 评论 -
IDE接口驱动程序移植
从上图可知:中断引脚为EINT6,上升沿有效;使用nWAIT信号;数据位宽为16。如前所述,移植驱动,只需要把上面的地址、中断号告诉内核就可以了。只需要修改两个文件,drivers/ide/arm/ide_arm.c、drivers/ide/Kconfig。在drivers/ide/arm/ide_arm.c文件中增加ide_s3c24xx_init函数,修改后文件如下(使用编译开关C原创 2016-06-09 14:10:35 · 763 阅读 · 0 评论 -
ps命令
原文地址为:Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有转载 2016-06-02 15:09:40 · 321 阅读 · 0 评论 -
驱动程序之原子操作
如果要实现驱动程序,在同一时间只能被一个应用程序打开。方法之一,可以用原子操作。原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atom原创 2016-06-02 14:40:29 · 837 阅读 · 0 评论 -
字符设备驱动程序之异步通知
如果要实现:平时应用程序处于休眠状态,当按下按键时,驱动告诉应用程序由状态改变,需要读取按键状态了。那么就需要建立驱动和应用程序之间的通信。应用函数中的某个函数怎么使用,需要包含哪些头文件,可以在服务器端查询,如:man signal;man getpid;man fcntl;驱动程序代码:#include #include #include #include #inc原创 2016-06-02 13:51:01 · 410 阅读 · 0 评论 -
字符设备驱动程序之poll机制
poll机制分析韦东山 2009.12.10所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。 一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析s原创 2016-06-02 01:18:08 · 1077 阅读 · 0 评论 -
中断按键驱动程序
#include #include #include #include #include #include #include #include #include #include #include static struct class *thirddrv_class;static struct class_device *thirddrv_class_dev;volatile unsigne原创 2016-06-01 22:17:49 · 594 阅读 · 0 评论 -
查询方式的按键驱动程序
#include #include #include #include #include #include #include #include #include #include static struct class *seconddrv_class;static struct class_device *seconddrv_class_dev;volatile un原创 2016-06-01 09:08:36 · 542 阅读 · 0 评论 -
嵌入式LED驱动程序(韦东山板子)
#include #include #include #include #include #include #include #include #include #include static struct class *firstdrv_class;static struct class_device *firstdrv_class_dev;volatile unsi原创 2016-06-01 00:03:34 · 2013 阅读 · 0 评论 -
嵌入式LED驱动程序
#include //配置头文件#include //内核头文件#include #include //时钟头文件#include //用户定义模块初始函数名需引用的头文件#include //模块加载的头文件#include // GPIO_LED DEVICE MAJOR#define GPIO_LED_MAJOR 97 //定义设备号// define LED#def原创 2016-05-31 23:42:54 · 926 阅读 · 0 评论 -
嵌入式驱动程序之信号量
如果要实现驱动程序,在同一时间只能被一个应用程序打开。也可以用信号量。信号量信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。当获取不到信号量时,进程进入休眠等待状态。定义信号量struct semaphore sem;初始化信号量void sema_init (struct semaphore *sem,原创 2016-06-02 16:03:17 · 753 阅读 · 0 评论 -
Bootloader的分区和启动
Bootloader大多是两阶段启动过程。第一阶段使用汇编来实现,完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,有更好的可读性和可移植性。原创 2016-05-20 20:52:12 · 2485 阅读 · 0 评论 -
嵌入式驱动之阻塞操作、非阻塞操作
阻塞阻塞操作 是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。非阻塞操作 进程在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。fd = open("...", O_RDWR | O_NONBLOCK); 比原创 2016-06-02 16:55:28 · 1625 阅读 · 0 评论 -
CS8900A网络驱动程序移植
上图为开发板上的网卡原理图,可得到:1.CS8900A的访问基址为0x19000000原创 2016-06-09 11:12:44 · 514 阅读 · 0 评论 -
如何判断外设使用的地址空间
S3C2410/S3C2440的存储控制器有如下特性:1.每个BANK的地址空间为128MB,总共1GB(8 BANKs);2.可编程控制总线位宽(8/16/32-bit),不过BANK0只能选择两种位宽(16/32-bit);3.总共8个BANK,BANK0~BANK5可以支持外接ROM、SRAM等,BANK6~BANK7除可以支持ROM、SRAM外,还支持SDRAM等。4.BA原创 2016-06-09 10:38:46 · 2079 阅读 · 0 评论 -
建立网络文件系统
在openJTAG下执行:set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.19:/work/nfs_root/tmp/fs_mini_mdev ip=192.168.1.17:192.168.1.19:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0原创 2016-06-09 00:49:14 · 279 阅读 · 0 评论 -
tftp下载内核和文件系统
按q进入openJTAG模式,执行menu命令回到原目录。tftp下载内核:1.打开tftp软件,把当前目录设置为要下载文件所在的目录;服务器ip设好,为Windows的ip。2.在openJTAG命令行里执行print命令看参数。 执行set ipaddr 192.168.1.17,把开发板的ip设为192.168.1.17 执行set serverip 192.原创 2016-06-09 00:47:45 · 2681 阅读 · 0 评论 -
韦东山虚拟机中arm-Linux-gcc的安装方法
在/work/tools目录下的gcc-3.4.5-glibc-2.3.6目录即是arm-Linux-gcc的目录,只需要把此目录下的bin包含进环境变量就可以正常使用了。方法如下:sudo gedit /etc/environment打开environment文件,把:/work/tools/gcc-3.4.5-glibc-2.3.6/bin加在后面,修改后如下:然后原创 2016-05-21 18:41:23 · 1971 阅读 · 3 评论 -
韦东山u-boot、kernel打补丁操作
u-boot操作:内核操作:1.编译内核原创 2016-06-08 09:32:36 · 3422 阅读 · 0 评论