心心程序博客

眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!

导航

2012年3月30日

setjmp

摘要: setjmp 与刺激的abort()和exit()相比,goto语句看起来是处理异常的更可行方案。不幸的是,goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。 为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件<setjmp.h>申明了这些函数及同时所需的jmp_buf数据类型。 原理非常简单: 1.setjmp(j)设置“jump”点,用正确的程序上下文填充jmp_buf对象j。这个上下文包括程序存放位置、栈和框架指针,其它重要的寄 阅读全文

posted @ 2012-03-30 09:57 心心程序博客 阅读(354) 评论(0) 推荐(0)

2012年3月29日

realloc重分配内存详解

摘要: http://hi.baidu.com/419836321/blog/item/6f158d22797008469258070b.html 阅读全文

posted @ 2012-03-29 16:36 心心程序博客 阅读(156) 评论(0) 推荐(0)

C/C++ 内存分配情况

摘要: http://blog.sina.com.cn/s/blog_7dc94d7e0100syfh.html在内存中 有大小端之分,一般现在用的都是小端模式 little endian小端模式的话是:高有效位放低地址例如:0xA5A1 阅读全文

posted @ 2012-03-29 10:11 心心程序博客 阅读(211) 评论(0) 推荐(0)

2012年3月28日

http://liulixiaoyao.blog.51cto.com/1361095/808925

摘要: http://liulixiaoyao.blog.51cto.com/1361095/808925 阅读全文

posted @ 2012-03-28 16:35 心心程序博客 阅读(181) 评论(0) 推荐(0)

2012年3月25日

restrict用法 (百度)

摘要: 简介 restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同样指向这个内存单元的其他指针都是未定义的,直白点就是无效指针。restrict 的出现是因为 C 语言本身固有的缺陷,C 程序员应当主动地规避这个缺陷,而编译器也会很配合地优化你的代码.例子 .. 阅读全文

posted @ 2012-03-25 17:00 心心程序博客 阅读(1522) 评论(0) 推荐(0)

2012年3月21日

exit小结

摘要: exit函数调用时将做几项主要的工作,一是调用atexit函数指定的函数;二是刷新所有输出流、关闭所有打开的流;三是关闭通过tmpfile()创建的临时文件;最后把控制权返回系统环境。 main()函数结束时也是调用exit()函数来结束的。 在这里有一个很有用的函数atexit(),它可以让用户在main()结束时自动运行用户自定义函数,atexit的原形是: int atexit(void (*)(void)); main()结束时欲运行的函数先由atexit注册,最多可以注册32个函数,这些函数不能有参数,执行顺序是LIFO在main函数中我们通常使用return (0);这样的方... 阅读全文

posted @ 2012-03-21 19:33 心心程序博客 阅读(196) 评论(0) 推荐(0)

2011年6月24日

(转)HEX文件和BIN文件格式的区别

摘要: HEX文件和BIN文件格式的区别HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。3 - BIN文件格式对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。4 - HEX文件格式HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:+----------------------- 阅读全文

posted @ 2011-06-24 21:19 心心程序博客 阅读(2332) 评论(0) 推荐(0)

(转载)ARM基础知识(强烈推荐)

摘要: ARM基础知识一ARM处理器共有37个寄存器。其中包括: **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。 **6个状态寄存器。这些寄存器都是32位寄存器。 ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。 **************************************************** 通用寄存器 ********** 阅读全文

posted @ 2011-06-24 21:15 心心程序博客 阅读(1047) 评论(0) 推荐(0)

(转载)S3C2440A工程移植:从ADS1.2到RealView MDK

摘要: RealView MDK在中国推出已经有一段时间了,而且作为未来发展的趋势必将取代ADS1.2,成为工程师广泛应用的开发平台。但是,以前的S3C2440的项目都是由ADS开发,而且我在网上搜索并没有发现有ADS1.2工程移植的例子,只能自己摸索。而且刚刚接触嵌入式的这个部分,希望把这个成果与大家分享,让其他的人少走弯路。移植思路:不兼容问题主要在于启动的汇编代码中加入了很多的与编译器相关的调用,只需修改原有的2440init.s部分代码就可以实现。而修改Realview自身引入的s3c2440a.s启动代码修要修改的内容过多。因而,采用第一种方案。编译中出现的问题以及解决:1, .\outpu 阅读全文

posted @ 2011-06-24 21:14 心心程序博客 阅读(3489) 评论(0) 推荐(0)

(转载)(void*)0 的理解

摘要: 一般把(void*)0定义为NULL表示这是个空指针void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。例如:float *p1;int *p2;p1 = p2;其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必 阅读全文

posted @ 2011-06-24 21:11 心心程序博客 阅读(6269) 评论(1) 推荐(1)