Hello world 应用程序

更新时间:
2024-09-25
下载文档

Hello world 应用程序

本节以 Hello world 工程来介绍 SylixOS 应用程序工程的创建、编译、部署和调试。

创建 SylixOS Base 工程

  1. 打开 RealEvo-IDE,在菜单栏中选择 File > New > SylixOS Base ,打开 SylixOS Base 对话框。

  2. 在 SylixOS Base 对话框中,自定义 Project name 并且 Location 保持默认,单击 Next 进入 Base 类型选择页面。

  3. 在 Base 类型选择页面中,选择 SylixOS Standard base 工程,单击 Next 进入工程设置对话框。

  4. 此对话框中可以选择编译工具链类型、编译代码的调试级别以及 CPU Type 等。这部分配置与实际硬件息息相关,由于本节以 RealEvo-Simulator 中的“zcu102”虚拟板卡进行演示,所以按下图配置工程,单击 Next 进入库选择对话框。

  5. SylixOS Base 默认包含 libsylixoslibcextern(其他库文件的说明见下表)。单击 Finish,完成 SylixOS Base 工程的创建。

大部分库是可选的,可根据实际需求进行选择,各库的说明如下:

库名说明是否必选
libsylixosSylixOS 内核源码库必选
libcexternSylixOS 的 c 库必选
libVxWorksVxWorks 兼容库非必选
libreadline命令行编辑器支持库非必选
liblualua 脚本库非必选
libsqlite3SQLite 数据库非必选
pciutilsPCIe 工具集非必选
libzmodemZmodem 协议工具,用于串口文件传输非必选
libexpatxml 解析库非必选
libluapluginlua 插件库,为 lua 脚本提供大量基础库非必选
libsunrpcSUN RPC 库,为网络文件系统(NFS)提供支持非必选
unfsdNFS 服务器程序非必选
libsalsaALSA 声卡库非必选
libpcap网络包抓取依赖库非必选
openssl开源 SSL 加密实现库非必选
libcurl多协议文件传输库非必选
libffi可移植的外部函数接口库非必选
libwaylandWayland 是一个用于合成程序与客户端通信的协议非必选
libgtest谷歌测试框架,包括 GoogleTest 和 GoogleMock非必选
tcpdump一个强大的命令行包分析器非必选
xtrace内核监控器非必选
zlib通用数据压缩库非必选
libarchivezip、unzip 工具压缩、解压缩库非必选
openssh开源 ssh 协议客户端、服务端加密传输库非必选

编译 SylixOS Base 工程

创建完 SylixOS Base 工程后需要对其进行编译。RealEvo-IDE 提供 2 种编译方式,分别介绍如下:

  • 方式一:选择新建的 SylixOS Base 工程,单击 RealEvo-IDE 工具栏的一键编译按钮,进行工程编译。

  • 方式二:选择新建的 SylixOS Base 工程,单击右键选择 Build Project ,进行工程编译。

说明:
SylixOS Base 工程编译完成后会生成基础库和驱动模块文件,编译生成的文件需要部署到目标板卡上,部署方法请参考部署应用。“zcu102”虚拟板卡上已经部署了 SylixOS Base 工程,所以无需部署 SylixOS Base 工程。

创建 SylixOS App 工程

  1. 打开 RealEvo-IDE,在菜单栏中选择 File > New > SylixOS App,打开 SylixOS App 对话框。

  2. 在 SylixOS App 对话框中,自定义 Project name 并且 Location 保持默认,单击 Next 进入工程设置对话框。

  3. 在工程设置对话框中,点击 Workspace 进入 Project base 工程选择对话框。

  4. 在 Project base 工程选择对话框中选择上文创建的 Project base 工程。单击 OK,回到工程设置对话框。

  5. 单击 Finish,完成 SylixOS App 工程的创建。

编译 SylixOS App 工程

修改完 SylixOS App 工程后需要对其进行编译。编译成功后生成的 helloworld 可执行文件保存在 helloworld 工程的 Debug 文件夹中。

Hello world 程序总是作为第一个程序出现在各种编程语言书籍中,作为一个经典的例子。下面我们将以 Hello world 工程来介绍 SylixOS 应用程序的编写和运行方法。

部署 SylixOS App 工程

helloworld 工程的部署和运行大致分为以下三个步骤:

步骤 1:部署设置

  1. 右击 helloworld 工程,选择 Properties 打开工程属性页。

  2. 在工程属性页中选择 SylixOS Project > Device Setting,可查看和更改部署配置。单击 New Device,添加新设备。

  3. 在添加设备的对话框中,设置 Device IP10.4.120.37,单击 Finish

    上图中各配置项解析如下:

    配置项说明
    Deivce Name设备名称,即设备在本 Workspace 的唯一 ID,不可重复,可以默认为 IP,也可以自定义
    Device IP设备 IP 地址,可以使用“ifconfig”命令查看网络信息
    Telnet Port设备 telnet 协议端口
    FTP Port设备 FTP 协议端口
    GDB Port调试应用程序时,gdbserver 端口
    Use SSH Connection使用 SSH 连接
    User Name登录用户名
    Password登录密码
  4. 设置完成后,在 Device Name 字段中出现新添加的设备,单击 Apply and Close 关闭对话框并保存设置。

步骤 2:上传应用程序

SylixOS 支持 FTP 服务器,所以可以用 FTP 客户端上传文件到 SylixOS 目标系统中。RealEvo-IDE 自带 FTP 客户端工具,上传方法如下:

  1. 右击 helloworld 工程,选择 SylixOS > Upload 上传文件或按 Atl + D 上传文件。

  2. 在 RealEvo-IDE 底部的 Upload 中可以查看上传进度。

    说明:
    如果文件上传失败,则会显示“Upload file failed!”字样,这种情况通常是由于网络或其他原因造成的,例如 IP 地址不正确、用户名密码错误、防火墙的拦截等。

步骤 3:运行应用程序

SylixOS Shell 下运行程序的方法与 Linux 系统相同,具体步骤如下:

  1. 使用 cd 命令切换目录到 “/apps/helloworld/”。

    [root@sylixos:/root]# cd /apps/helloworld/
    [root@sylixos:/apps/helloworld]# 
    
  2. 使用 ls 命令查看当前目录中的文件以确认包含文件 helloworld。

    [root@sylixos:/apps/helloworld]# ls
    helloworld
    
  3. 输入“./helloworld”执行程序文件,查看运行结果。

    [root@sylixos:/apps/helloworld]# ./helloworld
    Hello World!
    

RealEvo-IDE 启动运行

选择 helloworld 工程点击鼠标右键选择 Run As > SylixOS Remote Application将自动运行 SylixOS 应用程序。

调试 Hello World 应用程序

在程序开发的过程中,难免会因为一些程序编写上的问题而造成程序不正常运行,这个时候我们可以通过检查代码规范或者分析代码逻辑来查找问题,通常这种方法,在代码量很少的时候,能够很快地定位问题。但是当代码量达到上万行甚至更多的时候,情况将变得很糟糕,针对这种情况使用交叉调试技术,将使复杂问题简单化,进而能够迅速地定位问题所在。下面以 helloworld 工程为例来介绍如何通过 RealEvo-IDE 调试 SylixOS 应用程序。

一键推送调试

一键推送调试功能,需要在 RealEvo-IDE 中做如下配置:

  • 选中需要调试的工程,这里选择 helloworld 工程,选择菜单 Run > Debug Configurations 打开调试器界面。
  • 选择 SylixOS Remote Application ,点击 New launch configuration 按钮新建一个调试器对象并在 Name 编辑框填写调试器对象名字。

注意:
可以通过在编译成功的应用程序上点击鼠标右键选择 Debug As > SylixOS Remote Application 快速启动调试。

单击下图中的 Debug 进行配置。

Debug 按钮进入调试界面如下图 Debug 运行界面所示,下面是 RealEvo-IDE 一些调试命令:

  • 开始调试(全速运行)Run > Resume(F8)
  • 单步进入函数内部 Run > Step Into(F5)
  • 单步跳过 Run > Step Over(F6)
  • 从函数中退出 Run > Step Return(F7)
  • 停止调试 Run > Terminate(Ctrl+F2)
  • 设置断点 Run > Toggle Breakpoint(Ctrl+Shift+B)

手动启动调试

手动启动调试的方法,需要在 SylixOS Shell 中手动启动 GDB 服务器,具体方法如下:

  • 使用 debug 命令启动需要调试的应用程序(如 helloworld),如下图 手动启动 debug 所示。

  • 选中需要调试的工程(如helloworld工程),选择菜单 Run > Debug Configurations 打开调试器界面。选择 SylixOS Remote Application,新建一个调试器对象,点击 Select other... 按钮,在弹出框中使能 Use configuration specific settings,在下方列表中选择 SylixOS Manual Remote App Debugging Launcher,点击 OK 返回到 Debug Configurations 对话框,如下图 手动调试配置所示(箭头指示操作顺序)。

  • 打开 Debugger > Connection 标签页,Type 下拉框选择TCPHost name or IP address 编辑框中输入 SylixOS 设备 IP 地址,在 Port number 编辑框输入端口号(此端口号需要与 debug 命令启动时的端口号一致),点击 Apply 应用修改,点击 Debug 开始调试,如下图 设置调试配置所示。

Attach 调试

当程序正在运行时(程序可能已运行了很久)出现了严重错误(程序并没有因为这个错误而停止),这个时候由于程序不能停止,我们就需要一种特殊方法来发现程序运行中存在的问题。Attach 调试方法是一种能够对正在运行的程序进行调试的方法,该调试方法正好满足了上述情况,SylixOS 支持 Attach 调试方法。下面介绍如何使用 Attach 的方法来调试 SylixOS 应用程序:

  • 修改 helloworld 工程代码,如以下程序所示。

  • 手动启动应用程序如下图 helloworld 程序所示,使用 ps 命令查看进程的 ID。

    #include <unistd.h>
    #include <stdio.h>
    int main (int argc, char *argv[])
    {
        while (1) {
            printf("Hello SylixOS!\n");
            sleep(1);
    }
    return (0);
    }
    

    注意:
    程序代码增加了无限循环,目的是让程序连续运行,sleep 是一个睡眠函数,将使程序延时一秒再运行,这使得 SylixOS 其他线程得到执行的机会。

  • 选中 helloworld 工程,选择菜单 Run > Debug Configurations 打开调试器界面。选择 SylixOS Remote Application,新建一个调试器对象,名字默认,选择 Select other... 按钮,在弹出框中使能 Use configuration specific setting,在下方列表中选择 SylixOS Attach Remote App Debugging Lancher,点击 OK 返回到 Debug Configurations 对话框,如下图 Attach 调试所示(箭头指示操作顺序)。

  • 设置 Target process ID,此选项填写为之前所查看的进程 ID,最后点击 Apply 完成设置。

Non-stop 调试模式

在多线程调试时,经常需要调试某一个特定线程。Non-stop 模式可以使调试器在遇到断点时只停止设置断点的线程,其他线程继续运行。在 SylixOS 中,“调式 Hello World 应用程序”中介绍的三种调试方式都支持 Non-stop 模式。设置方法如下:选择 Run > Debug Configurations 对话框,打开 Debugger > Main 属性页,使能 Non-stop mode 即可打开 Non-stop 模式,如下图 Non-stop 模式所示。

文档内容是否对您有所帮助?
有帮助
没帮助