自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

转载 [转]进程上下文、中断上下文及原子上下文

谈论进程上下文 、中断上下文 、 原子上下文之前,有必要讨论下两个概念:a -- 上下文       上下文是从英文context翻译过来,指的是一种环境。相对于进程而言,就是进程执行时的环境;       具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。b -- 原子       原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(...

2018-10-25 09:41:53 437

转载 struct file struct inode

内核使用三种数据结构表示打开的文件:(1)每个进程在进程表中都有一个记录项,记录项包含一张打开的文件描述符表,可将视为矢量,每个描述符占用一项,与每个文件描述符相关联的是:a)文件描述符标志(close_on_exec).b))指向一个文件表项的指针。(2)内核为所用打开文件维持一张文件表,每个文件表项包含:a)文件状态标志(读写等等)b)当前文件偏

2016-01-12 22:07:25 293

转载 Linux字符设备驱动程序编写基本流程

系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送到硬件和从硬件读取数据; 3、读取应用程序传送给设备文

2016-01-09 20:10:29 994

转载 linux设备驱动makefile入门解析

对于一个普通的linux设备驱动模块,以下是一个经典的makefile代码,使用下面这个makefile可以完成大部分驱动的编译,使用时只需要修改一下要编译生成的驱动名称即可。只需修改obj-m的值。ifneq ($(KERNELRELEASE),)obj-m:=hello.oelse#generate the pathCURRENT_PATH:=$(shell p

2016-01-09 18:44:17 429

转载 UART串行通信详解

UART定义:UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 计算机与UART: 因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程 为:

2016-01-07 10:44:33 25929

转载 Linux 设备驱动框架

1)驱动框架      Linux将所有外部设备看成是一类特殊文件,称之为“设备文件”,如果说系统调用是Linux内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作

2016-01-06 19:59:29 252

转载 Linux makefile 教程 非常详细,且易懂

什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一

2016-01-06 19:39:12 494

转载 常用vi编辑器命令行

对于VI的命令行,不需要特意的去记忆,写下来,让要用到的时候能找到就行  游标控制h游标向左移j游标向下移k游标向上移l (or spacebar)游标向右移w向前移动一个单词b向后移动一个单词e向前移动

2016-01-06 19:21:59 338

转载 assert_param()

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_

2015-12-31 13:33:26 355

转载 #ifndef #define 中的头文件名为什么是__xxx_h

这样定义是为了避免重复定义。重复声明可以,但是重复定义是不可以的。重复声明只要名称完全相同即可。但是重复定义会出现编译错误的,即使同名也不可以。多次包含可能会引来重复定义。比如a.h中包含了b.h和c.h,而c.h包含了b.h,那么编译a.h时,b.h被编译了2遍。我们熟知b.h头文件中有FILE类型的定义,于是FILE被定义了2遍在b.h头文件中用#ifndef   __b_

2015-12-30 11:26:20 8280 3

转载 试图搞懂MDK程序下载到flash--MDK配置选项Linker、Target、Debug的理解分析

在写这一节时,我还是想再重复一下自己写这文章的目的,我的目的就是为了实现将MDK编写的裸机程序可不可以脱机运行,也就是不用调试的方法,因为调试的话程序默认是在SRAM中运行的,掉电丢失。而要脱机运行,就得将程序编译后的文件下载到flash中,最好能是nand flash。如果要下载到nand flash,那么就要编译生成一个bin文件,而不是用axf文件。那么剩下的问题就是,怎么生成一个完整、正确

2015-12-30 09:51:38 1221

转载 STM32之keil MDK下建立第一个工程

一、使用固件库建立一个工程我打算先从软件编程学起,以前用过KEIL 和IAR,IAR我比较熟悉,因为参加电子设计竞赛的时候,就是用它编程MSP430程序的。但我还是选择了KEIL,也许因为资料比较多,或者别的吧,我没分析过KEIL 和IAR代码效率如何,因为这不是我现在要考虑的,软件都只是工具而已。我去百度搜索了几篇如何在KEIL MDK环境下建立STM32工程,加上自己的实践。我

2015-12-29 17:14:35 2223

转载 文件句柄、文件描述符与进程和多线程的那些事

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个

2015-12-29 15:57:27 3317

转载 Linux内核启动过程分析

2015-12-23 20:57:31 278

转载 getchar()用法 与 getch()函数使用方法

getchar()用法1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格

2015-12-22 19:12:35 15610

转载 文件描述符和文件指针的区别

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。 文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件

2015-12-22 18:17:44 384

转载 linux驱动学习笔记(linux驱动头文件说明)

#include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include在linux-2.6.31_

2015-12-21 19:47:18 356

转载 Linux一些重要的头文件

1.系统调用 ---文件的操作函数#inlclude int  open(char *name,int how)   文件打开#include int  close(int fd)      文件关闭size_t   read(int fd,void *buf, size_t count)   读size_t   write(int fd,c

2015-12-17 18:20:29 1306

转载 2440lib.c之Delay

//***************************[ SYSTEM ]***************************************************void Delay(int time){ U32 val = (PCLK>>3)/1000-1; //由前面知,PCLK频率为50MHz。此时val的值为6249,减1是因为,计数时包括0。所以相当于计数了

2015-12-12 21:07:48 363

转载 void Uart_Printf(char *fmt,...)

[csharp] view plaincopyvoid Uart_Printf(char *fmt,...) //...表示可变参数(多个可变参数组成一个列表,后面有专门的指针指向他),不限定个数和类型,     {         va_list ap;//初始化指向可变参数列表的指针         char string[256];        

2015-12-12 20:09:28 1459

转载 error:Target dll has been cancelled.debugger aborted

MDK4.23调试裸机程序,出现这个问题先记下,以前成功调试过的,这次用又不会了……         找一下以前的文章:====================================================================================================================================

2015-12-10 20:22:55 3785

转载 HEX和BIN文件的区别

上一篇文章中演示的是裸板开发过程中可能遇到的两个问题的解决办法。1,是在keil中编写程序并编译连接成可以下载到开发板的  .hex 文件,然后用jlink仿真器下载;2,是在ubuntu中编写编译代码,生成的是 .bin 文件,可以用uboot 下载。这里可能会用像我这样的菜鸟会疑惑 ,hex与 bin文件同样是下载到开发中的二进制代码,有什么区别呢? Hex 文件和 B

2015-12-10 20:07:00 460

原创 WIN7上调试TQ2440 USB下载

在WIN7上需要使用软件TQBOARDDNW才可以传输文件,不过在使用SECURECRT软件时,上电后,按a,会出现 USB host  is not connected yet,此时需要多次重启,会有连接上的时候。

2015-12-08 19:11:48 1203

转载 用Keil-MDK开发TQ2440裸机程序入门教程

开发板也差不多买了半年了, 以前照着教程用的是软件是ADS,在win7下老是崩溃, 后来才知道ADS早就不提供支持了, ADS的公司怎样怎样了...(此处省略300..)然后我就捣鼓着怎么转到KEIL上来, 具体的例程代码我不会移植, 不过裸机开发是没什么问题的了, 在网上也找了些教程, 因为我比较菜, 然后教程又不是针对TQ2440的, 也有针对TQ2440的, 内容不全, 前段时间一直看不

2015-10-30 16:33:40 464

转载 S3C2440启动代码中应用程序执行环境的初始化

S3C2440启动代码中应用程序执行环境的初始化一、基础知识          我们编写的源文件(.c 或.s)经过ARM 编译器的编译生成ELF 格式的目标文件(后缀名为.o),目标文件经过ARM 连接器连接以后生成ELF 格式的映像文件(后缀名为.axf),此时的映像文件还包含一些调试信息,我们还需要通过fromelf 工具将其转换成适合在ROM 或RAM 中运行的二进制代

2015-10-30 15:37:07 429

转载 #define GPBCON (*(volatile unsigned *)0x56000010) 的理解:

对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。          以 #define IOPIN   (*((volatile unsigned long *) 0xE0028000))   为例:作为

2015-10-30 07:21:33 1108

转载 #ifdef __cplusplus extern "C" { #endif 的解释

在看代码时看到如下的代码: #ifdef __cplusplusextern "C" {#endif   时常在cpp的代码之中看到这样的代码:#ifdef __cplusplus extern "C" { #endif//一段代码#ifdef __cplusplus } #endif       这样的代码到底是什么意思呢?

2015-10-30 07:14:23 392

转载 ubuntu下安装交叉编译工具链的方法总结

1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹里 /home/wrq  arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下:http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz22. 解压

2015-10-21 09:30:01 714

转载 Ubuntu下,查看以及修改PATH的方法

查看方法:在终端里,输入命令:echo $PATH设置方法:在~/.bashrc里的最后,加入一行命令:export PATH=$PATH:other-path使它立即生效,要用如下命令:source ~/.bashrc1)/etc/profile:保存所有用户的系统环境变量的;当用户登录时,该文件被执行。2)/etc/bash.bashrc:保存所有用户的ba

2015-10-21 07:54:57 618

转载 yaffs2文件系统移植出错:usage: ./patch-ker.sh c/l m/s kerneipath

1.问题:按照手册做文件系统移植的时候,在执行补丁/patch-ker.sh c /opt/../linux-2.6.30.4/ 后,显示如下:usage:  ./patch-ker.sh  c/l m/s kernelpathif c/l is c, then copy. If l then linkif m/s is m, then use multi version code.

2015-10-20 16:00:11 881

转载 ubuntu下开启samba服务和windows共享文件

一. Ubuntu samba配置的安装:sudo apt-get install samba smbfs smbclient二. 创建共享目录:mkdir /home/komy/sharesodu chmod 777 /home/komy/share三. 创建Ubuntu Samba配置文件:1. 保存现有的配置文件sudo cp /etc/sam

2015-10-16 22:13:14 346

转载 uImage与zImage的区别

内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。   如何生成uImage文件?首先在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImag

2015-10-16 21:17:52 290

转载 Make Menuconfig详解 (配置内核选择)

Make Menuconfig简介make menuconfig 图形化的内核配置make mrproper -----删除不必要的文件和目录. #make config(基于文本的最为传统的配置界面,不推荐使用) #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 

2015-10-16 10:35:09 1200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除