今天看串口的初始化代码,发现了一个多维数组的问题,居然花了好长时间才看懂,只能说内核代码看起来太伤脑筋了啊
先贴代码
static struct plat_serial8250_port uart8250_data[][3] = {
[MACH_LOONGSON_UNKNOWN] {},
[MACH_LEMOTE_FL2E] {PORT(4, 1843200), {} },
[MACH_LEMOTE_FL2F] {PORT(3, 1843200), {} },
[MACH_LEMOTE_ML2F7] {PORT_M(3, 3686400), {} },
[MACH_LEMOTE_YL2F89] {PORT_M(3, 3686400), {} },
[MACH_DEXXON_GDIUM2F10] {PORT_M(3, 3686400), {} },
[MACH_LEMOTE_NAS] {PORT_M(3, 3686400), {} },
[MACH_LEMOTE_LL2F] {PORT(3, 1843200), {} },
[MACH_LOONGSON_LS3EVA] {PORT_M(2, 33000000), PORT_M(2, 33000000), {} },
[MACH_LOONGSON_END] {},
};
下面是这样呢调用的
iotype = uart8250_data[mips_machtype][0].iotype;
其中mips_matchtype表示的是机器的架构,和上面数组中的架构对应
但是这其中语法是怎样的呢?以前完全没见过这样定义数组的啊
不急,我写了个小程序,如下
#include <stdio.h>
int main(){
int a[][2] = {
[0] {1,2},
[1] {3,4},
[2] {5,6},
};
printf("a[1][1] = %d\n",a[1][1]);
return 0;
}
这个代码运行下,基本就知道上面程序是怎么一个原理了。输出结果是4
只是这种写法以前我c语言了解地少,真没见过,以后再也不敢说自己c语言学的好了
那么返回回来,内核中这样定义串口端口的结果体意义何在呢?
就是为了定义不同设备的不同串口的port的信息,后面的uart8250_data[][3]表示最多打开4个串口