- 论坛徽章:
- 0
|
ucosii-nano2410-0.2.tar.gz
(146.06 KB, 下载次数: 41)
各位好,初学linux下嵌入式开发,自己折腾一个月终于把ucosii移植到nano2410上能跑了。但面对越来越复杂的项目,对各include文件如何写、各模块如何组织越来越糊涂,所以特来请教。
附件是我目前勉强能跑的实例源码,安装方式为
autoreconf --install
CC=arm-linux-gcc ./configure --host=arm-linux
make
我面临的问题以下2类,还请各位前辈根据我的源码来帮忙诊断:
1。 include下头文件如何组织?
目前我是inlcudes.h包含所有ucos的声明,smdk2410.h包含所有硬件底层定义,drv下各硬件模块有单独的h头文件,结果要引用时一团乱,有些引用总的头文件,有些必须要引用单独的模块头文件,修修改改,自己都搞不清了;
虽然现在编译不出错了,但是这样乱法,不论是编译的效率,还是将来要修改时,都要费好大的劲。请教有什么好的原则和方式吗?
2。模块的组织:autotool的组织原则,就是各子模块目录下都是只编译不链接,然后各生成一个libXXX.a;然后在生成可执行文件的目录下将所有libXXX.a和main代码进行最后的链接(我的代码里是在board下生成最后可执行文件),也就是:
gcc -c drv/XXX.c -o drv/XXX.o
ar drv/XXX.o -> drv/libXXX.a
gcc -c kernel/XXX.c -o kernel/XXX.o
ar kernel/XXX.o -> kernel/libXXX.a
gcc -o 最终可执行文件 board/*.o drv/libXXX.a kernel/libXXX.a
如果子模块之间没什么关联调用,这样没问题。可是我有一次修改后,kernel/os_core.c调用了drv/led.c中的函数,编译、打包成libXXX.a都没问题,最后链接时,总是报kernel/os_core.c中的led_xxx()是未定义符号,无法链接。
无奈将kernel/os_core.c移到了board下,这下链接通过了,但这样违反了我按子模块分类目录的原则,这样的例子一多代码也乱了。何解?
盼求教
|
|