[RTOS 学习记录] 开发工具 Borland C/C++ 3.1 精简版

开发工具

image-20240420165417775

这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,目的是作为个人后续回顾复习使用。

1 BC3.1(Borland C/C++ 3.1)精简版使用示例

1.1 示例程序

test.c 存放路径:E:\Dosbox\exp2-1\test.c

#include <stdio.h>

int main(void)
{
    printf("Hello, world!\n");
    
    return 0;
}

1.2 编译示例程序

启动DOSBox,由于事先在DOSBox的配置文件DOSBox 0.74-3 Options.bat底部添加了如下命令:

# 意为把E:\Dosbox目录作为虚拟C根目录
MOUNT C: E:\Dosbox
# 配置环境变量
set PATH=%PATH;C:\BC\BIN;
C:

image-20240420143150140

所以,DOSBox启动后会自动挂载E:\Dosbox为C:根目录,并将E:\Dosbox\BC\BIN所在文件夹设置为环境变量,即BC3.1可执行文件所在目录,如下图所示:

image-20240420143651625

因此,现在我们可以将路径切换到test.c文件所在位置,即使用命令cd .\exp2-1,如下图所示:

image-20240420143926940

然后使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib test.c 即可将C源程序编译成obj目标文件,如下图所示:

image-20240420144512182

该条命令中的bcc是编译命令,它会执行BC\BIN目录下的bcc.exe文件;-c 表示将C源文件编译成目标文件OBJ;-ml 表示指定内存模式为large模式;-Ic:\bc\include 表示指定包含头文件路径为 c:\bc\include-Lc:\bc\lib 表示指定库文件路径为 c:\bc\libtest.c 表示等待编译的C源程序的文件名称。编译之后,当前目录下会生成一个 test.obj 文件,即目标文件,如下图所示:

image-20240420150201099

1.3 目标文件链接成可执行文件

为了得到扩展名为exe的可执行文件,我们还需要将test.obj目标文件和生成可执行文件所需的其他目标文件链接在一起。使用这条命令:tlink c:\bc\lib\c0l.obj test.obj,test,test,c:\bc\lib\cl.lib 即可启动BC提供的链接器tlink.exe,如下图所示:

image-20240420150744339

该条命令中的tlink是链接命令,它会执行BC\BIN目录下的tlink.exe文件;c:\bc\lib\c0l.obj 表示使用支持ml内存模式的启动模块c0l.obj;test.obj 表示上一个步骤(编译)得到的目标文件的文件名称;test,test 中的第1个test表示最终可执行文件的文件名称,第2个test表示map文件的文件名称;c:\bc\lib\cl.lib 表示使用和ml模式对应的运行库cl.lib。链接后,最终生成了一个可执行文件test.exe和一个文件test.map,如下图所示:

image-20240420151603206

使用命令test.exe运行编译链接得到的可执行程序,屏幕上显示出“Hello, world!”字符串,如下图所示:

image-20240420151801523

2 多文件程序的编译、链接

使用C语言编写的实际项目中,一个工程通常会采用模块化的方法,因此会有多个源文件。我们需要通过编译、链接这两个步骤才能得到最终的可执行文件,接下来就使用简单示例展示一下多文件程序的生成过程。

假设现在有一个应用程序,该应用程序由3个源文件组成。

  1. ma 程序代码
    ma.h

    // ma.h
    #ifndef _MA_H_
    #define _MA_H_
    
    void a_print();
    
    #endif
    
    

    ma.c

    // ma.c
    #include <stdio.h>
    #include "ma.h"
    
    void a_print()
    {
        printf("aaaaa\n");
    }
    
    
  2. mb 程序代码
    mb.h

    // mb.h
    #ifndef _MB_H_
    #define _MB_H_
    
    void b_print();
    
    #endif
    
    

    mb.c

    // mb.c
    #include <stdio.h>
    #include "mb.h"
    
    void b_print()
    {
        printf("   bbbbb\n");
    }
    
    
  3. test.c 程序代码

    // test.c
    #include "ma.h"
    #include "mb.h"
    
    int main(void)
    {
        for (; ;)
        {
            a_print();
            b_print();
        }
    }
    
    

2.1 编译

使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib ma.c 编译 ma.c,得到ma.obj,如下图所示:

image-20240420161826241

使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib mb.c 编译 mb.c,得到mb.obj,如下图所示:

image-20240420161908689

使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib test.c 编译 test.c,得到test.obj,如下图所示:

image-20240420162103400

2.2 链接

使用这条命令:tlink c:\bc\lib\c0l.obj ma.obj mb.obj test.obj,test,test,c:\bc\lib\cl.lib 链接ma.obj、mb.obj、test.obj和生成可执行文件所需的其他库文件,得到test.exe,如下图所示:

image-20240420162235760

2.3 运行

test.exe运行结果如下图所示:

image-20240420162405217

链接多个文件时,tlink命令很长,为了方便我们进行程序设计,BC3.1可以将链接命令写入一个链接文件的文本文件中。如此一来,只需执行命令:tlink @链接文件的文件名称 通过引用链接文件就能够对目标文件进行链接。

其中,链接文件的文件名称可以由我们用户进行自定义,例如本次示例程序的链接文件我们命名为testlink。然后,进行链接工作时执行的命令的格式就是:tlink @testlink

链接文件的文件内容可以分行书写,以原命令中的逗号为界进行分隔或者还可以使用“+”符号做为续行符,例如testlink的文件内容可以是:

c:\bc\lib\c0l.obj ma.obj mb.obj test.obj
test
test
c:\bc\lib\cl.lib

还可以这样书写:

c:\bc\lib\c0l.obj +
ma.obj +
mb.obj +
test.obj
test
test
c:\bc\lib\cl.lib

参考资料:

《嵌入式实时操作系统μCOS-II原理及应用》

相关推荐

  1. Bonnie++ 工具学习记录

    2024-04-20 18:44:05       12 阅读
  2. StorCli工具学习记录

    2024-04-20 18:44:05       14 阅读
  3. 《Effective Modern C++》- 极精简 30-35

    2024-04-20 18:44:05       17 阅读
  4. 【机器学习】实验记录工具

    2024-04-20 18:44:05       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 18:44:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 18:44:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 18:44:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 18:44:05       18 阅读

热门阅读

  1. 【Windows】GPU、CUDA、cuDNN、Pytorch、Python知识总结

    2024-04-20 18:44:05       11 阅读
  2. Python程序设计 时间处理

    2024-04-20 18:44:05       17 阅读
  3. Xcode15升级适配问题记录

    2024-04-20 18:44:05       15 阅读
  4. python图表用户界面(gui)的选择

    2024-04-20 18:44:05       12 阅读
  5. springboot 项目eureka注册中心切换为nacos+config

    2024-04-20 18:44:05       14 阅读
  6. 高频前端面试题汇总之手写代码篇

    2024-04-20 18:44:05       14 阅读
  7. Edge的使用心得与深度探索

    2024-04-20 18:44:05       16 阅读
  8. CPU执行过程

    2024-04-20 18:44:05       16 阅读