2011年4月3日
摘要: ”士可杀,不可辱“。 士有其高尚的贵族感,以及其良好的自律性,更要有社会成员之间对于彼此道德水平以及自律程度的信任。 当代社会已经没有了贵族感,也没有了其这份自律,所以这个社会需要法律,作为另外一种维护社会公平稳定的另一种手段。 阅读全文
posted @ 2011-04-03 20:02 如是晴朗 阅读(117) 评论(0) 推荐(0) 编辑
2011年3月22日
摘要: 使用A53XI241SV的第一篇博客 阅读全文
posted @ 2011-03-22 13:42 如是晴朗 阅读(129) 评论(0) 推荐(0) 编辑
2011年3月18日
摘要: 1、安全分配内存 1 #include <stdio.h> 2 #include <stdlib.h> 3 /* ******************************* 4 * 安全的内存分配函数 5 * *******************************/ 6 void *alloc(size_t size); 7 8 #define malloc /* 防止外界访问 malloc 函数 */ 9 #define MALLOC(num,type) (type *)alloc((num) * sizeof(type)); //定义malloc的替代宏 阅读全文
posted @ 2011-03-18 16:46 如是晴朗 阅读(165) 评论(0) 推荐(0) 编辑
2011年3月17日
摘要: 1、函数的缺省认定。当程序中遇见一个没有定义原型的函数时,会默认函数返回一个整型值。对于那些并不返回整型的函数来说这种认定会产生错误。一个例子如下,函数func()返回一个float值3.14(010000000010000100111010011),假定函数是这样调用的:1 float f;2 f = func();在函数调用之前,编译器不知道其原型,于是认定函数返回整型值,并产生指令将这个值转换成float,然后将其赋值给变量f2、函数的参数。传值调用不改变参数的值,凡是标量(就是值本身,包括各种基础数据类型,或者自定义结构)都是传值调用。数组参数是传址调用3、ADT和黑盒模块具有功能说明 阅读全文
posted @ 2011-03-17 19:52 如是晴朗 阅读(185) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <net/if.h>#include <netdb.h>#include <syslog.h>#include <l 阅读全文
posted @ 2011-03-17 17:12 如是晴朗 阅读(408) 评论(0) 推荐(0) 编辑
2011年3月16日
摘要: system.map内容格式为:线性地址 类型 符号具体内容如下:00100000 A phys_startup_32c0100000 T startup_32c0100000 A _text 注:表示内核代码第一个字节的地址c01000c6 t checkCPUtypec0100147 t is486c010014e t is386c0100199 t L6c010019b t check_x87c01001c2 t setup_idtc01001df t rp_sidtc01001ec t ignore_intc0100220 t rest_initc0100220 T stextc010 阅读全文
posted @ 2011-03-16 15:09 如是晴朗 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 使用proc文件系统来读取内核中的信息非常有用。实例:在开发I2C相关驱动时,在内核启动后用户空间想要知道I2C相关寄存器的值时,可以这样做:1)在I2C驱动模块中定义实际调用的函数static int read_i2cinfo_from_proc(char *buf, char **start, off_t offset, int count,int *eof, void *data){int len=0;len +=sprintf(buf+len,”I2C reg is 0x%x\n”,reg);return len;}2)在I2C模块(如I2C算法驱动模块)初始化时建立一个proc en 阅读全文
posted @ 2011-03-16 11:18 如是晴朗 阅读(2798) 评论(0) 推荐(0) 编辑
2011年3月13日
摘要: 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。。。。。。1,防止一个头文件被重复包含#ifndefCOMDEF_H#defineCOMDEF_H//头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedefunsignedcharboolean;/*Booleanvaluetype.*/typedefunsignedlongintuint32;/*Unsigned32bitvalue*/typedefunsignedshortuint16;/*Uns 阅读全文
posted @ 2011-03-13 21:27 如是晴朗 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1).并行设备的硬件寄存器(如:状态寄存器)2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)3).多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatil 阅读全文
posted @ 2011-03-13 21:26 如是晴朗 阅读(382) 评论(0) 推荐(0) 编辑
2011年3月7日
摘要: 1、声明指针之后,不会为其分配任何内存,其指向也是随机的。在对内存进行间接访问之前,一定要对其进行初始化,即是将其指向现有内存,或者分配另外的空间。一般说来,对未进行初始化的指针进行间接访问会产生一个段错误,或者是无效错误。2、指针的间接访问。获取指针指向的数据,或者向指针指向的空间进行赋值。3、指针运算的有效范围。数组的第一个元素和最后一个元素的下一个之间。但是最后一个元素的下一个元素是不能对其进行间接访问的。4、指针的关系运算是比较两个指针指向的地址是否相同。而且仅限于同一个数组内有效,否则结果不可预测。5、一些警告或者错误原因。 错误对一个未初始化的指针进行解引用。 错误对NULL指针解 阅读全文
posted @ 2011-03-07 10:50 如是晴朗 阅读(124) 评论(0) 推荐(0) 编辑