本帖最后由 wind_west 于 2020-5-6 09:44 编辑

前面已经将开发环境搭建完成,也对开发板提供的例程进行了测试,一路跌跌撞撞,总算是达到了期望了。昨天晚上回的家,今天总算是有点时间,也来分享一个Helloworld。这既是学习新编程语言开始,也是新旅程的出发。让我们一起学习,一起成长。

1、 入口 main 函数的参数
main 函数作为应用程序的入口,在头文件“#include<stdio.h> ”中。
main 函数需要传参数的时候完整的定义为 int main(int argc,char **argv);参数 argc,表示参数的个数;参数**argv,存储输入字符的数组;argv[0]表示程序名称;argv[1]——argv[n]输入的参数。
不传参数的时候定义为 int main(void);函数 main 的返回值为类型为 int,用于判断程序执行成功还是失败。
实际上,怎样定义main函数都看自己需要,我几种类型都试了试,编译和运行都没有什么问题。在单片机的编程中,我一般还是使用void main(void) ,在裸机下反正也不返回啥。不过在Linux下的编程,毕竟不是裸机,还是建议使用带参数、带返回值的类型。
2、编写简单的 helloworld.c 文件测试 main 函数。
#include<stdio.h>
  • #include<stdlib.h>
  • #include<unistd.h>
  • #include<sys/ioctl.h>
  • #include<sys/types.h>
  • #include<sys/stat.h>
  • #include<sys/select.h>
  • #include<sys/time.h>
  • #include<fcntl.h>
  • #include<errno.h>
  • #include<linux/input.h>
  • int main (int argc, char *argv[])
  • {
  •         printf("Hello World!\n");
  • }
  • 复制代码
    简单说明一下,其实编译的时候不需要这么多头文件,但是为了图个方便,就将 gpio_key 例程里面的所有头文件都复制过来了,有强迫症的同学多多包容哈。
    实际上在编辑这个文件之前,还有几个步骤:
    1、修改顶层的Makefile,其中的CC = /home/west_wind/tool_chains/tool_chain_1/environment-setup-aarch64-poky-linux 是我的路径,大家如果要参考,可以适当修改为自己的路径。
    # make all demoes at one time
  • #CROSS_COMPILE = arm-linux-gnueabihf-
  • #CC=$(CROSS_COMPILE)gcc
  • #CC = arm-linux-gnueabihf-gcc
  • CC = /home/west_wind/tool_chains/tool_chain_1/environment-setup-aarch64-poky-linux
  • all:
  •         make -C ./framebuffer
  •         make -C ./gpio_key
  •         make -C ./network
  •         make -C ./gpio_led
  •         make -C ./uart
  •         make -C ./program
  • .Phony: clean
  • clean:
  •         make clean -C ./framebuffer
  •         make clean -C ./gpio_key
  •         make clean -C ./network
  •         make clean -C ./gpio_led
  •         make clean -C ./uart
  •         make clean -C ./program
  • 复制代码
    2、新建文件夹:program。这里如果不想那么麻烦可以直接使用 cp 命令复制一个,只要注意不重名就好。
    3、复制gpio_key 文件夹下的 Makefile  到 program  。
    4、修改 TARGET = gpio_key  --》TARGET = helloworld  。Makefile的语法也不用去详细了解,有原来的例程,照葫芦画瓢还是不难的。
    helloworld的makefile.JPG
    5、修改文件夹下的文件为 helloworld.c, 编译OK。

    3、运行测试。
    程序生成之后,我是使用的SSH软件拷贝带U盘。然后将U盘插到开发板,挂载U盘(mount  /dev/sda  /mnt/usb)找到程序,使用命令运行,中间没有太多的问题。需要注意的还是编译器的问题,在一般的学习型开发板中,相关的开发环境已经设置好。留到我们这里,基本就是一个 make 就能够解决问题。
    但是我们这里是使用自己的虚拟机搭建的开发环境,这个编译器的问题需要注意。解决的办法也不少,我这里就在顶层的 Makefile 定义了一下编译器的位置。其他的方法就没有尝试了。
    将虚拟机的程序拷贝到开发板,其实使用U盘是比较稳妥的方式,但是调试的时候不断的插拔比较麻烦。后面在尝试网络上传的方式,看看哪种方式最便捷。现在就先将就着用吧,嘻嘻。
    程序在开发板的运行效果如图,能够看到终端打印了“Helloworld”:
    编译运行测试.JPG


    总结:
    CC = /home/west_wind/tool_chains/tool_chain_1/environment-setup-aarch64-poky-linux   这一句也不是必须的,大家在运行 make 编译之前,使用在终端输入指令  source  /home/west_wind/tool_chains/tool_chain_1/environment-setup-aarch64-poky-linux   效果应该是一样的。否则,在缺省状态下,make 编译不报错,但是程序不能在开发板运行,会显示:-sh: ./helloworld: cannot execute binary file: Exec format error。

    哈哈,已经很晚了,祝大家睡个好觉。细水长流,江湖再见。

    往期:
    【MYC-C8MMX物联网开发板】------搭建开发环境

    【MYC-C8MMX物联网开发板】------开箱测评