嵌入式学习--LinuxDay04

嵌入式学习--LinuxDay04

shell脚本

1.1数组

1.1.1数组的赋值

1.1.2数组的调用

1.2函数

1.2.1函数的定义方式

1.2.2函数的调用

2.分文件编程

2.1源文件

2.2头文件

3.编译工具

3.1 gcc编译工具

3.2 gdb调试

4.make工具

4.1定义

4.2Makefile格式

4.3Makefile管理多个文件

4.4Makefile变量

4.4.1自定义变量

4.4.2预定义变量

4.4.3自动变量

shell脚本

1.1数组

1.1.1数组的赋值

1array=(1 2 3 4 5)

  1. array=($1 $2 $3 $4 $5) 命令行传参

3) read a b c

array=($a $b $c)

4)read -a array 终端输入数据数组

1.1.2数组的调用

array[i] 获取下标i变量i范围0~n-1

${array[i]} 通过下标获取元素

array[i]=200 数组元素重新赋值

${array[@]} 数组的所有元素

${#array[@]} 数组所有元素的个数

遍历数组

  1. echo ${array[@]}
  2. for ((i=0;i<${#array[@]};i++))

do

echo -n ${array[i]}

done

练习:用shell脚本实现冒泡排序

1.2函数

1.2.1函数定义方式

1function_name ()

{

命令表

}

2

function function_name ()

{

命令表

}

1.2.2函数调用

函数名 参数列表

#!/bin/bash
fun()
{echo "hello"
}function fun1()
{NUM=`expr $1 + $2`echo $NUM
}fun
fun1 1 2

函数内$1 $2表示的是传递的参数

2.分文件编程

2.1源文件

main.c //存放main函数

fun.c //存放其他功能函数

2.2头文件

包含头文件宏定义函数声明结构体共用体枚举typedef

例如

编译:gcc main.c fun.c

执行:./a.out

#include引用时“ ”与<>的区别:

< > :系统默认搜索路径下查找头文件

" " :当前目录查找找不到系统默认搜索路径下查找头文件

系统默认搜索路径?

/usr/include

/usr/local/include

源码ctrl

退回ctrl alt -

3.编译工具

3.1 gcc编译工具

预处理:#开头内容,展开头文件、替换宏定义、删除无用注释,不会检查语法错误

gcc -E xx.c -o xx.i

编译:检查语法错误,有错就报错,无错就继续生成汇编文件

gcc -S xx.i -o xx.s

汇编: 将汇编文件生成不可执行的二进制文件

gcc -c xx.s -o xx.o

链接: 链接库文件,生成可执行的二进制文件

gcc xx.o -o xx

gcc xx.c -o xx -->直接生成可执行文件

gcc xx.c --->a.out

3.2 gdb调试

gcc -g xx.c

gdb a.out

r: 运行代码

l: 查看文件

b 行号或者函数名:添加断点

info b:查看断点情况

d num(断点编号):删除断点

p 变量名:查看变量的值

s/n: 单步运行,s会进入子函数顺序执行;单步跳过,n不会进入子函数

c: 执行到下一个断点的位置

help:帮助

q: 退出

步骤:代码写好后,先通过gcc -g进行编译代码,没有错误后,可以通过gdb a.out进行调试,输入l查看文件内容,通过b设置断点,输入r进行运行,n或s进行单步调试,q退出

4.make工具

4.1定义

make:工程管理器

make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。

Makefile makefile 读取唯一配置文件

gcc hello.c fun.c ---->a.out

gcc -c hello.c -o hello.o

gcc -c fun.c -o fun.o

gcc xx.o -o xx

4.2Makefile格式

目标依赖

命令

注意:命令前必须TAB

gcc编译步骤可以按照如下步骤逆序Makefile文件

gcc -c xx.c -o xx.o 目标xx.o 依赖xx.c

gcc xx.o -o xx 目标xx 依赖xx.o

例如写一个test.c文件写一个Makeflie文件编译

使用make进行编译生成相应可执行文件

4.3Makefile管理多个文件

首先创建多个文件

:

写一个Makefile文件

4.4Makefile变量

4.4.1自定义变量

自定义变量一般大写,取变量$(变量名)

= 递归赋值按照递归方式展开

:= 直接赋值(当前为多少就固定是多少)

+= 追加赋值

?= 判断之前是否定义如果定义不再赋值否则重新赋值

4.4.2预定义变量

系统预先定义好的一些变量,可能有默认值可能没有默认

RM 文件删除程序的名称,默认值为rm -f

CC C编译器的名称,默认值为cc。

CPP C预编译器的名称,默认值为$(CC) –E。

CFLAGS C编译器的选项,无默认值。

OBJS 生成的二进制文件或目标文件,自己定义

4.4.3自动变量

$< 第一个依赖名称

$@ 目标文件完整名称

$^ 所有依赖名称

最终

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Gartner 魔力象限:单一供应商安全访问服务边缘 2024,Palo Alto Networks 再次荣膺领导者

Gartner Magic Quadrant for Single-Vendor SASE 2024 Gartner 魔力象限&#xff1a;单一供应商安全访问服务边缘 2024&#xff0c;Palo Alto Networks 再次荣膺领导者 请访问原文链接&#xff1a;https://sysin.org/blog/gartner-magic-quadrant-single-vendor-sase-2024/&a…

成都睿明智科技有限公司抖音电商服务靠谱吗?

在这个电商风起云涌的时代&#xff0c;抖音作为短视频直播的超级流量池&#xff0c;正深刻改变着人们的购物习惯。无数商家蜂拥而至&#xff0c;渴望在这片蓝海中找到属于自己的岛屿。而提及抖音电商服务&#xff0c;成都睿明智科技有限公司无疑是一个备受瞩目的名字。那么&…

了解Webpack并处理样式文件

目录 引入定义安装和使用配置文件命令配置单独文件指定文件 处理样式css-loader使用 style-loaderless-loaderPostCSSpostcss-loaderpostcss-preset-env 引入 随着前端的快速发展&#xff0c;目前前端的开发已经变的越来越复杂了&#xff1a; 比如开发过程中我们需要通过模块化…

Harbor使用

文章目录 1、上传镜像1.1、在Harbor上创建一个项目1.2、docker添加安全访问权限1.3、推送docker镜像到该项目中1.3.1、登录到Harbor1.3.2、给镜像重新打一个标签1.3.3、推送镜像到Harbor中 2、拉取镜像2.1、先删掉原来的镜像2.2、执行拉取命令 1、上传镜像 需求&#xff1a;将…

OpenHarmony标准系统上实现对rk系列芯片NPU的支持(驱动移植)

1.将RKNPU驱动移植到Openharmony内核 本文以rk3568为例&#xff0c;将RKNPU驱动移植到Openharmony使用的kernel 5.10中 开发环境 DAYU200 rk3568开发板OpenHarmony 4.1 Release 64位系统 文档约定&#xff1a;4.1r_3568为OpenHarmony标准系统源码根目录 1.0 环境准备 1.搭建O…

RedisBoost Web缓存加速平台

1.产品介绍 产品名称:RedisBoost Web缓存加速平台 主要功能: 智能缓存策略配置 功能描述:RedisBoost提供了一套直观易用的缓存策略配置界面,允许用户根据业务场景自定义缓存策略,包括缓存时间(TTL)、缓存淘汰算法(如LRU、LFU)、数据分区与分片策略等。支持动态调整策…

Cisco ASA 9.22.1 发布下载,新增功能概览

Cisco ASA 9.22.1 - 思科自适应安全设备 (ASA) 软件 Cisco Adaptive Security Appliance (ASA) 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-asa/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 新增功能 重要…

【机器学习】---深入探讨图神经网络(GNN)

深入探讨图神经网络 1. 图的基本构成示例图邻接矩阵 2. GNN的基本原理消息传递机制更新公式 3. GNN的类型及应用3.1 Graph Convolutional Networks (GCN)GCN实现示例 3.2 Graph Attention Networks (GAT)GAT实现示例 3.3 GraphSAGEGraphSAGE实现示例 4. GNN的应用场景5. GNN的挑…

【BurpSuite】访问控制漏洞和权限提升 | Access control vulnerabilities (3-6)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【BurpSuite】访问控制漏洞和权限提升 | Access control vulnerabilities (3-6&#xff09; 实验三 Lab: User role controlled b…

1. AOSP源码导入到AndroidStudio

1. AOSP源码导入到AndroidStudio 原文地址:http://www.androidcrack.com/index.php/archives/6/ ⚠️ 在执行一下操作前, 请先完整的编译一次系统, 若不清楚如何编译系统. 请访问下面文章 http://www.androidcrack.com/index.php/archives/3/ 1. 生成idegen.jar source build…

微服务学习笔记之Docker

目录 认识Docker 安装Docker 安装yum工具 配置Docker的yum源 更新yum&#xff0c;建立缓存 安装Docker 启动并校验 配置镜像加速 Docker常见命令 命令 演示 给命令起别名 Docker数据卷 认识数据卷 数据卷常见命令 nginx的html目录挂载演示 数据卷挂载本地目录或…

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目&#xff0c;主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写&#xff0c;通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API&#xff0c;就可以利用Docker-Compose进行编排管理。Docker-Co…

OpenMV与STM32通信全面指南

目录 引言 一、OpenMV和STM32简介 1.1 OpenMV简介 1.2 STM32简介 二、通信协议概述 三、硬件连接 3.1 硬件准备 3.2 引脚连接 四、软件环境搭建 4.1 OpenMV IDE安装 4.2 STM32开发环境 五、UART通信实现 5.1 OpenMV端编程 5.2 STM32端编程 六、SPI通信实现 6.1 …

Vue devtools 插件

一、安装 去这下载https://chrome.zzzmh.cn/ 打开chrome的扩展程序 再打开开发模式 把刚才下载的拖到这里 然后把它固定到工具栏 就是这样了。 二、使用 程序通过open on live server后&#xff0c;打开开发者工具&#xff0c;找到vue就可以了。 这是代码 <div id"ap…

【Redis 源码】3dict字典数据结构

1 数据结构说明 dictionary数据结构&#xff0c;也称为哈希表&#xff08;hash table&#xff09;。用于存储字典。哈希是一个键值对的集合&#xff0c;每个键都是唯一的并与一个值相关联。字典的设计旨在提供高效的查找、插入和删除操作。 2 核心数据结构 hash 的数据结构定…

腾讯云SDK基本概念

本文旨在介绍您在使用音视频终端 SDK&#xff08;腾讯云视立方&#xff09;产品过程中可能会涉及到的基本概念。 音视频终端 SDK&#xff08;腾讯云视立方&#xff09; 应用 音视频终端 SDK&#xff08;腾讯云视立方&#xff09;通过应用的形式来管理您的项目&#xff08;Ap…

LabVIEW提高开发效率技巧----合理管理程序架构

在LabVIEW开发中&#xff0c;合理管理程序架构是保持项目可维护性和扩展性的关键。随着项目复杂度的增加&#xff0c;良好的架构设计可以避免代码混乱&#xff0c;并且便于后期的修改和扩展。以下是两种常见且有效的架构管理方式&#xff1a; 1. 面向对象编程&#xff08;OOP&a…

初识Tomcat

Tomcat是一款可以运行javaWebAPP的服务器软件。 一个服务器想要执行java代码&#xff0c;则需要JRE&#xff08;jvm、java运行环境等&#xff09;&#xff0c;但是需要执行javaWEB项目则还需要服务器软件&#xff0c;Tomacat就是其中很流行的一款。因为一个javaWEB项目会有很多…

USB2.0主机设备检测过程以及信号分析

一&#xff0c;USB协议发展 USB接口自1994年推出以来&#xff0c;经过30年的发展&#xff0c;从USB1.0发展到了现在的USB4.0&#xff0c;传输速率也从最开始的1.5Mbps&#xff0c;大幅提高到了最新的40Gbps。 USB协议按照速度等级和连接方式分可分为7个版本&#xff0c;但是从…

JAVAEE如何实现网页(jsp)间的数据传输?一文总结

刚刚接触到JAVAEE的WEB开发&#xff0c;解释不周的地方希望感谢指正&#xff01;&#xff01;&#xff01; 情景如下&#xff1a; 我的使用是21版的IDEA&#xff0c;9.03版本的tomcat&#xff0c;来做一个示范。 构建项目 点击下一步 -> 完成&#xff0c;等待项目构建结束…