在读uboot的lib_arm/board.c中的start_armboot ()函数遇到了"init_fnc_t **init_fnc_ptr;”一句话,后来查看init_fnt_t数据类型的定义,看到“typedef int (init_fnc_t) (void);”,不过这句话似乎也不容易看懂,经过一番搜索和实验,才知其确切含义. 先看看这个“typedef int (*init_fnc_t) (void);”.后者很清楚就是定义了一个指向int (function)(void)类型函数的…
typedef int(init_fnc_t) (void); 这个就是一个取别名的过程. 我们通常情况下会如下使用 typedef :typedef int MyInt;MyInt a; 这个时候我们的MyInt 就和int是一样的意思. 而对于函数的申明我们通常会这样申明:int InitFunction(void);此时表示申明了一个函数名为InitFunction的函数, 函数没有任何的形参,返回值类型为int型. 而对于 typedef int(init_fnc_t) (void);就…
1.typedef  int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数.而“init_fnc_t  *init_sequence[]={ cpu_init,  board_init }”表示用init_fnc_t(函数类型)去定义一个一维指针数组,数组中的元素都是指针变量,而且都是指向函数的指针,这些函数返回值都是int型,无参数的.更明朗的说就是数组中的每个元素是用来存放函数入口首地址的. 2.int (*init_fnc_t)…
<pre lang="c" escaped="true">int (*(*fp)(void *))[10]; //这个类型用typedef分解出来 // 第一步:此指针是一个指向函数T1的指针typedef int (*T1(void *))[10];T1 *fp; // 第二步:T1 是一个函数,返回值是T2,参数为(void *)typedef int (*T2)[10];typedef T2 T1(void *);T1 *fp; // 第三步:T2…
fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void hello(void) { printf("你好!"); } void bye(void) { printf("再见!"); } void ok(void) { printf("好的!"); } typdef void (*funcptr)(voi…
问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,<C专家编程>P64原文如下: 规则A规定了要按照优先级来解释声明(算是一句废话).规则C请参照本人上一篇笔记:http://www.cnblogs.com/deyuanqin/p/5705967.html.规则B的具体实践过程如下图: 本着抛砖引玉的目的,我们使用以上规则分析void (*signa…
http://blog.csdn.net/geekcome/article/details/6249151 ----------- void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型.void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值.例如: int * pint; void *pvoid; pvoid = pint; /* 不过不能 pint= pvoid; */ 如果要将pvoid赋给其他类型指针,则…
转:http://blog.sina.com.cn/s/blog_4850a7880100hnam.html void (*signal(int signo, void (*fun(int))))(int) int (*p)(); 这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数. int (*fun())(); 这个式子与上面式子的区别在于用fun()代替了p,而fun()是一个函数,所以说就可以看成是fun()这个函数执行之后,它的返回值是一个函数指针,这…
http://blog.csdn.net/sever2012/article/details/8281271 1.signal( int sig, void (*func)(int))signal是一个函数,有2个参数,第一个是int类型,第二个参数是一个函数指针 2.void (*signal(int sig, void (*func) (int))) (int) signal仍然是一个函数,他返回一个函数指针,这个指针指向的函数没有返回值,只有一个int类型的参数 3.简化:typedef…
把void (*signal(int signum,void(*handler)(int)))(int)分成两部分: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 此处由于加了typedef自定义了一个新类型sighandler_t,所以第二行的函数原型看起来顺眼多了,形式跟int func(char c, int i)无异,但是如果看不懂typedef语句,这两…
同事去面试的时候的问题: 测试一下发现:在同时存在int*和void*的重载函数时,vs2010的环境下,优先匹配void* #include<iostream> using namespace std; class Test{ public: int foo(void* y); int foo(int* x); }; int Test::foo(void* y) { cout << "void*" << endl; ; } int Test::fo…
void (*signal (int sinno,void(*func)(int)))(int) 先来看void(*func)(int)   这里的意思是声明一个函数指针func,它的参数类型为int,参数名可省略不写,当然(int x)也没错. 声明一个函数指针signal,他有两个参数,int sinno,和一个函数指针参数void(*func)(int). signal函数有自己的参数类型int,省略了参数名:void (*signal (int sinno,void(*func)(int…
原函数是<The C programint  language >5.11文本行排序的程序,如下: void qsort(void *v[], int left, int right, int (*comp)(void *,void *)) { int i,last; if( left >= right) return; swap(v,left,(left+right)/2); last = left; for(i = left + 1; i <= right; ++i) if(c…
javascript:void(0) 含义 我们经常会使用到 javascript:void(0) 这样的代码,那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢? javascript:void(0) 中最关键的是 void 关键字, void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值. 语法格式如下: <head> <script type="text/javascript"&g…
1,main():相当于 int main() 2,int main():int 是main() 函数的返回类型.这表明main()函数返回的值是整数且授受任何数量的参数. 3,void main():void为空类型.这表明main函数无返回值且授受任何数量的参数. 4,int main(void):main不接受任何参数且返回的值是整数. 另外请注意: main()为老式的写法.返回类型int在新型的编译器重不可以省略,否则会有警告: void main()为老式的写法.6.0及之前的VC使…
// #define a int[10] #include <stdio.h> #include <stdlib.h> #define a int[10] int main() { int *p=(int *)malloc(sizeof(a)); p[0]=1; printf("%d\n",p[0]); return 0; } // typedef int a[10]; #include <stdio.h> typedef int a[10]; in…
如题,把C程序中的主函数int main(void)改成static int main(void)会怎么样呢? 比如把 #include <stdio.h> int main(void) { printf("Hi\n"); return 0; } 修改为: #include <stdio.h> static int main(void) { printf("Hi\n"); return 0; } 请读者先自己想一想! ————————————…
typedef int a[10]; a b[10]; 为什么分配400个字节的空间? int a[10];为什么分配了40个字节的空间? 问题:应该怎么解释typedef的这种行为呢?而如果换成是#define a int[10];以上定义则报错? typedef int a[10]; 说明a就等同于int[10]类型..所以 a b[10];//等同与int b[10][10]; 而int a[10];这里的a代表的不是类型..而是数组名.. 而#define只是字符替换而已.. a b[1…
lpAddFun是typedef定义的一个名称 可以用来定义变量 比如 lpAddFun p; 那 p就是 int(*p)(int, int); 首先(*p)说明p是一个指针,(*p)();说明p指向函数 (*p)(int, int)说明p指向的函数有两个int类型参数, 最后 int(*p)(int, int); 说明 p指向的函数返回 值类型是int…
是个自定义类型的语句,typedef用来定义类型的别名,status i 就相当于int i…
typedef struct file { ... }FileInfo, *FileP; 上述程序中定义了一个结构体,结构体的名字为file,并且给其指针 取个别名为FileP,所以后续程序中出现FileP就相当于是struct file *…
注意:这里的(3)代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的. 其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响. 前天组管问我 int(10)与int(11)…
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø 跳转到第二阶段代码入口 (2)第二阶段的功能 Ø 初始化本阶段使用的硬件设备 Ø 检测系统内存映射 Ø 将内核从Flash读取到RAM中 Ø 为内核设置启动参数 Ø 调用内核 1.1.1 U-Boot启动第一阶段代码分析 第一阶段对应的文件是cpu/arm920t/start.S和board/sa…
(一)本次移植是基于FL2440,板子的基本硬件: CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75C 2片*32MB=64MB,挂载于nGCS6 (0x3000 0000) NANDFLASH 型号:K9F2G08U0B  大小:256MB Network    Adapter (网卡) DM9000AEP 10/100M自适应,挂载于nGCS4 (0x2000 0000) LED 5个LED(LED0~3)I/…
1. u-boot介绍 本次移植采用的是U-Boot-1.2.0版本. 3. U-Boot源码分析 3.1 源码入口的解释 可能大多数的同学上网查资料后都了解到,stage1阶段的启动代码,主要就在start.s文件里.此start.s也是系统上电后执行的第一个代码.它全部由汇编编写.在讲述start.s之前,我们先来了解一下,系统怎么知道它要先去start.s里执行代码. 我们知道,每个可执行的映像Image,肯定会给编译器一个入口,而且是“有且只有一个全局的入口”.我们可以把这个入口放在fl…
瘋耔新浪微博:   http://weibo.com/cpjphone 一: 1◑ 从链接脚本文件u-boot.lds('/opt/4418-source/android/u-boot' )中可以找到代码的起始: OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_stext) SECTIONS { . = 0…
/lib_arm/board.c 主要完成了一些初始化的操作,最重要的是有start_armboot函数 _armboot_start地址为多少?? /* * * U-Boot code: 00F00000 -> 00F3C774 BSS: -> 00FC3274 * IRQ Stack: 00ebff7c * FIQ Stack: 00ebef7c */ #include <common.h> #include <command.h> #include <mal…
U-Boot启动过程完全分析 1.1       U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 (2)第二阶段的功能 初始化本阶段使用的硬件设备 检测系统内存映射 将内核从Flash读取到RAM中 为内核设置启动参数 调用内核 1.1.1             U-Boot启动第一阶段代码分析 第一阶段对应的文件是cpu/arm920t/s…
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合我们的开发板进行配置,还无法使用.而要进行这样的个性化配置,前提条件就是对uboot开机流程和编译系统有所了解,本文主要讨论前者.uboot是一个两阶段bootloader,第一阶段主要做硬件直接相关的初始化,使用汇编编写;第二阶段主要为操作系统的运行准备环境,主要用C编写,这里以ARM平台为例分析…
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,同时,此时的uboot.bin也没有结合我们的开发板进行配置,还无法使用.而要进行这样的个性化配置,前提条件就是对uboot开机流程和编译系统有所了解,本文主要讨论前者.在三星的SoC中, 启动流程可以分为三个阶段BL0, BL1, BL2, BL3, 三星自己的手册对BL1的解释也不尽相同, 一种是将在iRAM中运行的程序都归结为BL1…