[uCOS/uCGUI] 如何在bc集成环境里编译uc/os

HOHO   2011-7-27 11:52 楼主

本来按照邵教授和书上说的,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 编辑 ]
生活在激情中 ... 希望 哈哈 https://home.eeworld.com.cn/?80086

回复评论 (3)

还得下载tasm吧
点赞  2011-8-8 14:10
不错,我是新手,对我有用.
点赞  2011-9-3 20:08
mark一下
点赞  2011-11-10 14:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复