- 博客(13)
- 资源 (19)
- 收藏
- 关注
转载 程序中使用虚拟地址的好处
1. 读写内存的安全性物理内存本身是不限制访问的,任何地址都可以读写,而操作系统要求不同的页面具有不同的访问权限,这是利用CPU模式和MMU的内存保护机制实现的。例如,Text Segment被只读保护起来,防止被错误的指令意外改写,内核地址空间也被保护起来,防止在用户模式下执行错误的指令意外改写内核数据。这样,执行错误指令或恶意代码的破坏能力受到了限制,顶多使当前进程因段
2013-12-25 20:29:57 1673 1
转载 typedef 函数指针
“函数指针”的本质是一个指针变量,只不过该指针变量指向函数。1:简单应用形式1:返回类型(*函数名)(参数表)[html] view plaincopyprint?#include stdio.h> char* (*test)(char *);//定义一个函数指针,使用之前对其赋值 char* fun(char *ch)//定义一个普通函数 {
2012-11-03 12:21:20 331
转载 C语言的那些秘密之---函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意
2012-11-03 12:20:17 286
原创 C局部变量返回值
1、char *fun(void){ char *str = "111"; return str;}int main(void){ char *p = fun(); printf("%s\n",p);}2、char *fun(void){ char str[] = "111"; return str;}int main(void){ char *p = fun(
2012-10-17 22:47:26 427
原创 DM9000 uboot驱动分析
今天看了一下DM9000,下面对其工作原理及驱动程序进行分析。DM9000是一款简单的网卡芯片,内部实现MAC && PHY,阅读芯片手册和原理图应该明白DM9000的寄存器基址,基本寄存器的功能。在2440中不同的片选有不同的地址空间(不明白的搜ngcs),加上DM9000内部的0x300便宜就形成了DM9000的寄存器地址。几个要点:1、DM9000寄存器访问。以DM9
2012-10-13 23:44:15 672
转载 从串口驱动分析Platform驱动模型
在Linux-2.6 16c550 串口驱动移植一文中的static struct platform_device sc16550_device结构体在配置好以后,使用了linux内核模型的platform总线机制中设备注册接口函数:platform_device_register(&sc16550_device);将 sc16550_device 设备挂载到了platform bus上。上文
2012-09-23 13:10:45 401
原创 VIM基本应用
VIM是Linux下经典的编程编辑工具,也是本人在工作中经常使用的,有句话叫做:世界上有三种程序员,一种使用VIM,一种使用EMACS,剩下的使用其他的。下面对VIM经常用到的命令进行总结: 1、移动,如果你使用VIM请不要使用箭头来移动光标,H,J,K,L。 2、查找变量函数等的定义位置,g+](需要ctags配合,在源码目录使用ctags -R .生成tags),使用Ctrl +
2012-09-10 23:33:59 279
转载 C语言中的结构体指针
以前以为结构体直接用&就能取地址,看了这篇文章恍然大悟,看来只是看代码是很难注意细节的啊!转载如下: 看代码!以后这错误不能犯了。结构体数组一生下来就必须malloc #include #include typedef struct Ruler {int len;double start;double step;double stop;} *R
2012-09-08 23:46:23 585
原创 FAT32文件系统实践
== FAT32 ==FAT32文件系统有自己的格式,其中比较重要的概念包括:=== MBR ===MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令(在我们的操作中BIOS负责LOAD内核,并且跳转到内核加载地址,并不涉及硬
2012-08-18 12:56:50 1113
原创 C陷阱与缺陷——个人总结
C陷阱与缺陷_总结 第三章intcalendar[12][31]; sizeof(calendar)的值是372(31*12)与sizeof(int)的乘积。inta[3] 除了a被用作运算符sizeof的参数这一情形,在其他所有的情形中数组名都代表指向数组a中下标为0的元素的指针。正如我们合乎情理的期待,sizeof(a)的结果是整个数组
2012-06-15 12:46:00 357
原创 linux最基本的命令
一、注销,关机,重启 1、Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]#logout Red HatLinuxrelease 9(Shike) Kernel 2.4.20.8 onan i686 Login: ← 回到登陆的画面 2、关机或重新启动的shutdow
2012-06-09 15:04:17 260
原创 单片机keil编译几个问题及解决
在keil编程过程中多文件的编译遇到一些问题: 选用89C51/52如果定义外部变量过多,连接过程中会出现溢出问题(address space overflow)。这是解决办法是在某些变量定义前加上idata; 在某些C文件中,都用到了延时函数,都有类似的定义,连接就会出问题。连接器不允许出现同名或者类似名称的函数定义,这时可以改名或者直接调用外部延时函数(只使用一
2012-06-09 09:16:59 541
IPC_Overview-LCA-2013-printable.pdf
2020-07-29
DS18B20双路串口输出
2012-06-10
系统程序员成长计划
2012-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人