如何在bc集成环境里编译uc/os
本来按照邵教授和书上说的,uc/os在pc机上编译调试应该是非常简单的。只要把uc/os解压到根目录,保持原来的目录结构不变,再装上bc45,就可以了。但是实际问题是网上基本上能找到的都是bc31,而且都是经过瘦身的版本,少了很多文件。基本开发可以,对uc/os这样规模的程序就问题百出了。
网上的经验介绍也不少了,但是感觉自己搞的时候还是困难重重。而且都只是介绍了命令行方式,没有介绍集成环境开发。实际上只有能够在集成环境下运行成功,整个工作才有意义,不然只是验证了几个例子而已,根本没法进行自己的开发。
第一次用完全没概念,直接在网上下了bc和uc/os,按照介绍装上了。然后打开程序,编译,出错。运行附带的可执行文件,没反应。当时就觉得晕了,不知道如何下手。
然后看了三天书,又把几个源程序打出来看,发现其实整个结构蛮简单的,代码也不多,就是分页符多,打印出来厚厚的一叠,感觉好象很长一样。但是一直都太忙没有时间,直到昨天。花了一天的时间从早到晚,再从晚到早,终于把它搞定了。才发现其实非常简单,关键就是能不能找到它的七寸(关键)。
我总结一下我遇到的问题和走过的弯路,给大家借鉴。
步骤1.BC文件是否齐全
bc的文件是否齐全很重要,网上很多都是精简版,少很多文件,所以注意检查bin目录里面是否有这7个文件
bc.exe IDE
bcc.exe c
make.exe make
tlink.exe 连接
tasm.exe 汇编
tasm2msg.exe 汇编
touch.com 修改日期
我下过三个版本,都是bc31,但是里面的文件都不一样。
版本A 只有bc.exe 命令行无法编译
版本B 只有bc.exe tasm.exe tasm2msg.exe 命令行无法编译
版本C 没有bc.exe只能在命令行编译,不能在集成环境编译。特别是版本C我是下的 FreeWiny 的,结果文件也不全。
步骤2 路径的设置
感觉uc/os太依赖绝对路径了,可能是方便于不同的项目共享。但是却给调试带来很多麻烦,很多莫名其妙的错误都是这个引起的。由于我们安装的是bc31,而uc/os用的的是bc45,所以必须修改路径。FreeWiny和HComputer都是修改程序的路径设置,我觉得这样太麻烦,要修改Test.lnk和Test.mak,而且以后每次版本变动都要重新修改。其实只要解压的bc到c:/bc45目录就可以保证命令行编译成功。
步骤3
运行/SOFTWARE/uCOS-II/EX1_x86L/BC45/TEST下的maketest.bat。它用到了c:/bc45下面的这5个文件 make.exe,touch.com,bcc.exe,tasm.exe,tlink.exe。运行后在/SOFTWARE/uCOS-II/EX1_x86L/BC45/下会生成LST、OBJ、 WORK三个子目录。可执行文件在Work目录下面。
步骤4
FreeWiny和HComputer的文章都是讲到运行maketest.bat成功就打住了,没有再往下分析。实际上到步骤3虽然编译成功,但是没法调试,用TD只能是汇编级调试,意义不大。所以我们还需要让程序能在bc集成开发环境里面编译运行。这样才能比较方便地调试分析。这一步我走了很多弯路。开始我用bc直接打开test.c编译,出错。我分析是路径的问题,找不到包含文件。于是把所有用到的文件放到一起,为了保险,我干脆全放到bc的bin目录下面,把bc的库文件和包含文件也拷进来。结果又出现link error,仔细看了程序,test.c只包含了includes.h,象OS_CORE.C等文件都没包含。于是在test.c里面加上include "ucos_ii.c",然后错误,重复定义。去掉includes.h,在每个c文件加上条件编译,还是错。发现os_cfg.h必须在os_cpu.h后面,继续改。最后os_cpu_a.asm报错,out of memory!……
折腾了好久,始终搞不定。准备放弃时突然想到建工程文件。
上次在看到某个人的经验说是打开工程文件直接编译,但是我下的uc/os里面从来没找到过什么prj文件。我以为是别人用的uc/os
版本不同,或者我的bc版本太低,想不明白就没有深究。看来这也许是解决问题的最后办法了。
以前也没用过bc,它的菜单里面只有open project和close project,居然没有新建。搞了半天,原来open project如果文件不存在就新建。晕!然后加入test.c ucos_ii.c os_cpu_c.c os_cpu_a.asm四个文件,编译,又连接错,晕晕晕!定睛一看,好像都是pc开头的函数找不到原型,加入pc.c,编译,…… 找不到Tasm2msg.exe??? 在硬盘上狂搜,终于在n年前用的tc下面找到了,
copy过来,编译,ok!!!!!!!爽!!!
初学uC/OS-II,由于之前没用过BC,对这编译器也不太熟,人也比较笨,所以经过了几天的摸索,我今天终于把书上的例子调试出来了,现把我使用的认为比较方便的方法写在这,献给那些像我一样的菜鸟们,希望对你们有所帮助,避免走太多的弯路。总结起来,具体步骤如下:
1)、安装BC45至C:/,书上要求用BC45,其实对一般的程序,BC31也行,我就是用的BC31,安装位置也不是一定要在C:/下——虽然书上和网上很多高手都说要安装在C:/下,这跟我的调试的方式有关。具体看下面。
2)、将uC/OS-II解压,也不一定要解压至C:/,其它位置也行.
3)、在BC45的安装目录/BC45/BIN/下建立一个文件夹uCOS-II,然后将uC/OS-II解压目录/SOFTWARE/uCOS-II/SOURCE/下的os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c复制至该文件夹。
4)、将uC/OS-II解压目录下的/SOFTWARE/uCOS-II/EX1_x86L/BC45/WORK/里的INCLUDES.H、OS_CFG.H、OS_CPU.H、PC.H、UCOS_II.H五个头文件复制到BC45的安装目录/BC45/INCLUDE/下,然后将/SOFTWARE/uCOS-II/EX1_x86L/BC45/WORK/下的OS_CPU_A.ASM、OS_CPU_C.C、PC.C、UCOS_II.C复制至BC45的安装目录/BC45/BIN/下。并将刚复制过来的UCOS_II.C里的文件包含代码:
#include "/software/ucos-ii/source/os_core.c"
#include "/software/ucos-ii/source/os_flag.c"
#include "/software/ucos-ii/source/os_mbox.c"
#include "/software/ucos-ii/source/os_mem.c"
#include "/software/ucos-ii/source/os_mutex.c"
#include "/software/ucos-ii/source/os_q.c"
#include "/software/ucos-ii/source/os_sem.c"
#include "/software/ucos-ii/source/os_task.c"
#include "/software/ucos-ii/source/os_time.c"
改成:
#include "/BC45/BIN/uCOS-II/os_core.c"
#include "/BC45/BIN/uCOS-II/os_flag.c"
#include "/BC45/BIN/uCOS-II/os_mbox.c"
#include "/BC45/BIN/uCOS-II/os_mem.c"
#include "/BC45/BIN/uCOS-II/os_mutex.c"
#include "/BC45/BIN/uCOS-II/os_q.c"
#include "/BC45/BIN/uCOS-II/os_sem.c"
#include "/BC45/BIN/uCOS-II/os_task.c"
#include "/BC45/BIN/uCOS-II/os_time.c"
5)、至此,所有配置性的修改全部完成,只要从BC45/BIN/下的BC.EXE打开/SOFTWARE/uCOS-II/EX1_x86L/BC45/WORK/TEST.C即可编译OK,或者直接把TEST.C复制至BC45/BIN下调试,我觉得这样更好,更方便些,这样编译uC/OS-II就基本上脱离了uC/OS-II的解压文件夹了,直接使用BC就行,今后自己写的程序也不需要放在规定的位置,可自己建一文件夹专门存放。
以上所写,希望对那些跟我一样的菜鸟们有所帮助,如果有什么错误,请各位高手多多指教!
redhat(82698328) 15:04:16
还有一份看看吧
redhat(82698328) 15:04:25
将上述文件红色部分修改为Borland C安装的路径(如d:/borlandc/),修改后为
ECHO OFF
ECHO *******************************************************************************
ECHO * uC/OS-II
ECHO * The Real-Time Kernel
ECHO *
ECHO * (c) Copyright 2001, Jean J. Labrosse, Weston, FL
ECHO * All Rights Reserved
ECHO *
ECHO * Filename : MAKETEST.BAT
ECHO * Description : Batch file to create the application.
ECHO * Output : TEST.EXE will contain the DOS executable
ECHO * Usage : MAKETEST
ECHO * Note(s) : 1) This file assume that we use a MAKE utility.
ECHO *******************************************************************************
ECHO *
ECHO ON
MD ../WORK
MD ../OBJ
MD ../LST
CD ../WORK
COPY ../TEST/TEST.MAK TEST.MAK
d:/borlandc/BIN/MAKE -f TEST.MAK
CD ../TEST
保存并关闭文件
5、 运行maketest.bat,在d:/software/uCOS-II/EX1_x86L/BC45/WORK/下就能找到生成的test.exe文件
6、 调试生成的test.exe文件:运行Borland C安装目录下bin文件夹中的TD.EXE文件,执行File/Open命令,打开d:/software/uCOS-II/EX1_x86L/BC45/WORK/test.exe,就可以进行源码调试了!