嵌入式学习之Linux系统编程篇笔记——系统编程初探

配套视频学习链接:https://www.bilibili.com/video/BV1zV411e7Cy?p=2&vd_source=d488bc722b90657aaa06a1e8647eddfc

目录

Linux系统编程的基本认识

什么是Linux系统编程?

什么是系统编程

系统编程的作用

怎么学习Linux系统编程?

Linux系统编程基本程序框架

Linux系统编程的基本认识

什么是Linux系统编程?

Linux系统编程也叫Linux下的高级编程,是介于应用层和驱动层之间的。

 

什么是系统编程

以 UCOS 裸机实时操作系统为例对系统编程概念进行引入。 相信学过裸机的同学一定不陌生, 在使用 UCOS 实际开发一个项目或者一个产品的时候, 会使用 UCOS 提供的接口进行编程,UCOS 系统编程的一个简单示例代码如下所示:

void task(void *pd)
{
;
} 
OS_STK stack[1024];
int main()
{BspInit();OSInit();OSTaskCreate(task,(void *)0,&stack[1023],1);OSStart();}

上述代码会使用 UCOS 提供的函数对系统和硬件的相关功能进行调用,而系统编程的定义为:使用操作系统自身提供的接口进行开发的过程就叫做系统编程。

由于 UCOS 等一众裸机操作系统实现起来较为简单,所以系统的底层开发人员和上层应用开发人员是同一个人或者同一团队,而 Linux操作系统将底层和上层应用进行了分离,从而可以让更多的人加入到 Linux 系统的开发中,但是这样每个人都会有权力调用底层接口对硬件进行操作,从而给整个系统带来了不稳定性和不安全性。为了解决这一隐患,Linux 系统推出了系统调用。

所谓系统调用指的是 Linux 内核对一系列接口封装后提供给用户的一系列 API 函数,需要特定的机制才能使用系统调用, 所以系统调用的出现, 保证了系统的稳定性和不安全性。
 

系统编程的作用

为了更直观的了解系统编程的作用, 这里作者以武侠小说中练习绝世武功作为类比。 若是想要练成一门绝世武功, 只是有相对应的武功秘籍是不行的, 在在之前, 你需要通过每天扎马步、 跑步等方式对身体进行锤炼, 有了一个好的体魄才能开始武功秘籍的学习。 这里要认清楚,并不是练了武功秘籍才有了好的体魄, 而是有了好的体魄才能练习武功秘籍。

而系统编程就是后学开发的基础, 系统编程基础打好之后可以完成的工作如下所示:

1) 操作系统开发: 系统编程是操作系统开发的基础, 它涉及到开发和维护内核、 驱动程序和其他底层系统软件。

2) 应用程序开发: 一些应用程序需要直接访问硬件或操作系统资源, 例如音频、 视频、网络或文件系统, 因此需要进行系统编程。

3) 系统管理: 系统编程可以用于编写脚本和工具, 以管理计算机系统和网络, 例如配置文件、 监控和自动化任务。

4) 安全: 系统编程可以用于编写安全软件和工具, 例如防病毒软件、 防火墙和入侵检测系统。

5) 性能优化: 系统编程可以用于编写优化代码, 以提高程序的性能和响应速度, 例如利用多线程、 异步 I/O 和内存映射等技术。

 

怎么学习Linux系统编程?

推荐迅为电子的框架学习法,可以参考我的这篇文章:Linux学习方法-框架学习法——Linux应用程序编程框架

Linux系统编程基本程序框架

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{//argc:表示的是命令行中参数的个数//argv:表示的是命令行中的参数int i;printf("argc is %d\n",argc);for(i=0;i<argc;i++){printf("argv[%d] is %s\n",i,argv[i]);};return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读者交流群

自开设公众号以来&#xff0c;收到众多读者的关注&#xff0c;所以我很高兴在这里向大家推荐加入我的技术交流群。如果你对Java和Go语言有兴趣&#xff0c;想要与其他同好分享经验和知识&#xff0c;那么这个读者群将是一个理想的选择。 在这个读者群中&#xff0c;我们有机会与…

知识积累(五):Transformer 家族的学习笔记

文章目录 1. RNN1.1 缺点 2. Transformer2.1 组成2.2 Encoder2.2.1 Input Embedding&#xff08;嵌入层&#xff09;2.2.2 位置编码2.2.3 多头注意力2.2.4 Add & Norm 2.3 Decoder2.3.1 概览2.3.2 Masked multi-head attention 2.4 Transformer 模型的训练和推理2.4.1 训练…

Redis实战——优惠券秒杀:超卖问题一人一单问题

目录 优惠券秒杀Redis实现全局唯一ID业务场景代码实现&#xff1a; 添加优惠券业务场景新增普通券新增秒杀券测试添加秒杀券 实现秒杀下单业务分析流程代码编写 超卖问题超买场景分析解决方案使用乐观锁 一人一单业务场景解决步骤 集群环境下的并发问题 优惠券秒杀 Redis实现全…

06.Web APIs中正则表达式的使用

一、正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是一种字符串匹配的模式&#xff08;规则&#xff09; 使用场景&#xff1a; 例如验证表单&#xff1a;手机号表单要求用户只能输入11位的数字 (匹配)过滤掉页面内容中的一些敏感词(替换)&#xff0c;或…

15届蓝桥杯第三期模拟赛所有题目解析

文章目录 &#x1f9e1;&#x1f9e1;t1_奇数次数&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t2_台阶方案&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t3_约数个数&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t4_最…

AI基础知识(2)--决策树,神经网络

1.什么是决策树&#xff1f; 决策树是一类常见的机器学习方法&#xff0c;决策树是基于树的结构来进行决策。决策过程中提出的每一个问题都是对于属性的“测试”&#xff0c;决策的最终结论对应了我们希望的判定结果。一个决策树包含一个根节点&#xff0c;若干个内部节点和若…

无设备树platform设备驱动实验:platform驱动注册代码框架测试

一. 简介 前面两篇文章中&#xff0c;一篇实现 platform设备注册代码实现&#xff0c;文章如下&#xff1a; 无设备树platform设备驱动实验&#xff1a;platform设备注册代码实现-CSDN博客 一篇文章实现了 platform驱动注册代码框架&#xff0c;文章如下&#xff1a; 无设…

基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…

Java推荐算法——特征加权推荐算法(以申请学校为例)

加权推荐算法 文章目录 加权推荐算法1.推荐算法的简单介绍2.加权推荐算法详细介绍3.代码实现4.总结 1.推荐算法的简单介绍 众所周知&#xff0c;推荐算法有很多种&#xff0c;例如&#xff1a; 1.加权推荐&#xff1a;分为简单的特征加权&#xff0c;以及复杂的混合加权。主要…

如何让intellij idea支持一个目录多个springtboot或maven项目

一、背景 有的时候&#xff0c;我们希望intellij idea 能像 eclipse 一样有workspace的概念&#xff0c;能在一个workspace目录里面引入多个项目&#xff0c;如&#xff1a; 我们有项目a、项目b&#xff0c;现在的项目几乎都是springboot项目&#xff08;即maven项目&#xf…

论文阅读——RSGPT

RSGPT: A Remote Sensing Vision Language Model and Benchmark 贡献&#xff1a;构建了一个高质量的遥感图像描述数据集&#xff08;RSICap&#xff09;和一个名为RSIEval的基准评估数据集&#xff0c;并在新创建的RSICap数据集上开发了基于微调InstructBLIP的遥感生成预训练…

Python学习01 python开发的准备工作 1.Python解释器的下载 2.Pycharm集成开发环境的安装

0.按照步骤&#xff0c;快速进行python的开发准备工作 1. Python解释器的下载 下载地址 https://www.python.org/ 选择对应你的系统的安装包 2.记得勾选这里将python加入你的路径中 3.有如下四个程序表明安装成功 4.点击上图中的第二个程序打开窗口检查解释器能否正常工作 输…

uniapp修改头像,选择图片

一、页面效果 二、手机上的效果 使用过的实例&#xff1a; 手机上就会显示类似如下&#xff1a; 三、代码 <view class"cleaner-top" click"chooseImg"><view class"cleaner-avatar"><image :src"imgArr" mode"…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:FlowItem)

瀑布流组件的子组件&#xff0c;用来展示瀑布流具体item。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。仅支持作为Waterflow组件的子组件使用。 子组件 支持单个子组件。 接口 FlowItem() 使…

挑战杯 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

常用芯片学习——DS3231M芯片

DS3231M RTC实时时钟 芯片介绍 DS3231M是一款低成本、极其精确的 I2C 实时时钟 &#xff08;RTC&#xff09;。该设备集成了电池输入&#xff0c;并在设备主电源中断时保持准确的计时。微型电子机械系统 &#xff08;MEMS&#xff09; 谐振器的集成提高了器件的长期精度&…

Tomcat Seeion 集群

部署&#xff1a;nginx服务器&#xff1a;11-11&#xff1b;tomcat1:11-3; tomcat2:11-6 nginx服务器11-11做搭建&#xff1a; [rootmcb-11 ~]# systemctl stop firewalld [rootmcb-11 ~]# setenforce 0 [rootmcb-11 ~]# yum install epel-release.noarch -y [rootmcb…

关于 NXP PCA85073A 实时时钟读取数据时出现 IIC 传输失败的原因解析和解决方法

一、前言 对使用 I2C 传输的 RTC 外设 PCA85073&#xff0c;在 I2C 传输过程中若有复位信号输入&#xff0c;则有概率出现 I2C 死锁的状态&#xff0c;即 SCL为高&#xff0c;SDA一直为低的现象。 二、I2C 基本协议 在分析问题出现的原因之前&#xff0c;我…

前端基础篇-深入了解 JavaScript(JSON、BOM、DOM 和事件监听)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 JS - JSON 2.0 JS - BOM 2.1 Window 浏览器窗口对象 2.2 Location 地址栏对象 3.0 JS - DOM 3.1 获取 HTML 元素对象 3.2 调用 Element 对象的属性、方法 4.0 事件…

威联通(QNAP) TS-466C NAS 开箱评测,4盘位NAS,N6005,存储服务器

威联通(QNAP) TS-466C 四盘位NAS (Network Attached Storage:网络附属存储) 开箱评测 之前用的TS-551经过几轮系统升级后明显感觉性能跟不上了&#xff0c;变卡了&#xff0c;所以升级一下&#xff0c;换了TS-466C。 威联通迁移NAS还挺方便的&#xff0c;只有将原先NAS里的硬…