本来按照邵教授和书上说的,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,就可以进行源码调试了!
以上文章非原创,也不知道是哪位大侠的杰作,在这里谢过了。
我是在学习版主“ 一步一步教你使用uCOS-II" 的过程中遇到了BC31的使用问题才找到这篇文章的,正好帮我解决了问题,与大家同享!
论坛里已经有人提供了原版BC31和uCOS源码的下载,安装后我们C盘下多了两个文件夹“borlandc”和“software”,根据以上文章的说法,我只修改文件夹名“borlandc”为“BC45” ,这样就可以正常使用uCOS源码了。
[ 本帖最后由 HOHO 于 2011-7-27 11:57 编辑 ]
|