【正点原子】Linux应用编程入门~概念及环境介绍

在这里插入图片描述

应用编程概念

应用编程(也可称为系统编程)与驱动编程、裸机编程有何不同?

  • 系统调用;

  • 何为库函数;

  • 应用程序的 main()函数;

  • 应用程序开发环境的介绍;

系统调用
定义
  • 系统调用(system call)是 Linux 内核给应用层的应用编程接口(API),是 Linux 应用层到内核的入口;

  • 系统调用是内核直接向应用层提供的应用编程接口,譬如 open、write、read、close 等

功能

通过系统调用,通过系统调用 API,应用层可以实现与内核的交互;

Linux 应用程序可以请求内核以自己的名义执行某些事情,譬如打开磁盘中的文件、读写文件、关闭文件以及控制其它硬件外设;

在这里插入图片描述

  • 操作系统下有两种不同的状态:内核态和用户态

  • 应用程序运行在用户态、而内核则运行在内核态。

应用编程与裸机编程、驱动编程区别

裸机编程:无操作系统支持的编程环境称为裸机编程环境,例:单片机编程开发,直接在硬件运行程序,无操作系统支持;

Linux 驱动编程:是基于内核驱动框架开发驱动程序,驱动开发工程师通过调用 Linux 内核提供的接口完成设备驱动的注册,驱动程序负责底层硬件操作相关逻辑;

Linux 应用编程(系统编程):基于 Linux 操作系统的应用编程,在应用程序中通过调用系统调用 API 完成应用程序的功能和逻辑,应用程序运行于操作系统之上;

总结
  • LED 应用程序与 LED 驱动程序是分隔、分离的,它们单独编译,它们并不是整合在一起的;

  • 应用程序运行在操作系统之上,有操作系统支持,应用程序处于用户态,而驱动程序处于内核态,与纯粹的裸机程序存在着质的区别;

  • Linux 应用开发与驱动开发是两个不同的方向;

库函数

分辨调用的函数是系统调用还是库函数即可

发展历程
  • 系统调用使用起来并不是很方便,提供比底层系统调用更为方便、更为好用、且更具有可移植性的调用接口;

  • C 库是应用层使用的一套函数库,Linux 下,常以动态(.so)库文件的形式提供,存放在根文件系统/lib 目录;

  • C 语言库函数构建于系统调用之上,库函数绝大部分由系统调用封装而来;

库函数和系统调用区别
  • 编写应用程序除使用系统调用API接口,如 open、write、read、close之外,还使用库函数(C语言库函数);

  • 有些库函数不调用任何系统调用,譬如一些字符串处理函数 strlen()、strcat()、memcpy()、memset();

  • 有些库函数则会使用系统调用来完成实际操作,譬如库函数 fopen 内部调用了系统调用 open()来帮它打开文件、库函数 fread()利用系统调用 read()来完成读文件操作、fwrite()就利用了系统调用 write()来完成写文件操作;

在这里插入图片描述

实现者的角度来看,系统调用与库函数之间有根本的区别;

在实际应用编程中,直接把它们当做是 C 函数即可,知道调用的函数是系统调用还是库函数即可

标准 C 语言函数库

Linux系统使用的C语言库为GNU C 语言函数库,作为标准 C 语言函数库;

( 也 叫 作 glibc , 其 网 址 为http://www.gnu.org/software/libc/)

glibc 版本

在这里插入图片描述

main 函数

Linux 应用程序中,main 函数也是作为应用程序的入口函数存在,main 函数的形参一般会有两种写法

//示例代码 1.4.1 main 函数写法之无传参
int main(void)
{
	 /* 代码 */
}
//示例代码 1.4.2 main 函数写法之有传参
int main(int argc, char **argv)
{
	 /* 代码 */
}

argc 形参表示传入参数的个数,包括应用程序自身路径和程序名;

例:运行当前目录下的 hello 可执行文件,并且传入参数,如下所示:
./hello 112233
那么此时参数个数为 2,并且这些参数都是作为字符串的形式传递给 main 函数:
argv[0]等于"./hello"
argv[1]等于"112233"
有传参时 main 函数的写法并不只有这一种
开发环境推荐

我们的重点是学习应用编程!而不是学习 IDE 怎么用

Eclipse

vscode+ARM gcc(交叉编译工具)

个人:nodepid++、gcc

刚刚下了vscode,很烦这个弄几次了前期配置,之前也是;

c文件运行到底具体咋整好麻烦,幸好只是当编辑工具,后期再学一学吧;

我记得我成功过,好像改两个地方就行(前提是插件装好);

在这里插入图片描述

入门篇

Makefile

提高篇
进阶篇

cmake+vscode

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正点原子是一款基于ARM架构的嵌入式开发板,它提供了丰富的硬件接口和操作系统支持,并具备强大的实时性能。在正点原子上进行Linux应用编程,可以充分发挥其强大功能和性能,实现各种应用领域的需求。 正点原子基于Linux系统,使用C/C++等编程语言进行应用开发。在开发过程中,可以利用Linux提供的丰富的软件库和工具链,进行应用程序的编写和调试。通过Linux的开源特性,开发者可以利用已存在的各种软件包和库,快速构建和开发与自己需求相符的应用程序。 正点原子具备实时性能,可以在应用开发过程中利用实时操作系统和相关技术,实现对硬件的精确控制和数据处理。实时性能可以确保应用程序对各种实时需求的响应,并提供稳定和高效的运行环境。 在正点原子上进行Linux应用编程,可以实现各种应用场景的需求,比如智能家居、工业自动化、智能交通等等。具体的应用可以根据需求进行定制开发,从而满足不同领域和行业的需求。 通过正点原子Linux应用编程,可以提升系统的可扩展性和灵活性,实现多样化的功能需求。而且由于Linux的开源特性,开发者可以利用强大而庞大的社区资源,进行问题解决和技术分享,不断改善和优化应用程序。 总之,正点原子Linux应用编程是一种强大的开发方式,可以利用Linux系统的丰富资源和实时性能,开发各种应用程序,满足不同领域和行业的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值