免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1466 | 回复: 0
打印 上一主题 下一主题

实例求教软件的组织方式,附实例ucosii移植到nano2410 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 14:43 |只看该作者 |倒序浏览
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下,这下链接通过了,但这样违反了我按子模块分类目录的原则,这样的例子一多代码也乱了。何解?

盼求教
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP