嵌入式C语言学习——基于Linux与GCC

Linux终端创建文件指令: https://blog.csdn.net/xtho62/article/details/118194873
vim编辑器基本指令
1.过vim编辑器打开/创建文件:vim 文件名
2.进入文件,默认在正常模式,按 i 进入编辑模式
3.在编辑模式中,按ESC退出编辑模式,返回正常模式
4.正常模式,按**:**进入命令行模式
q+回车 退出
wq+回车 保存并退出
『已解决』Linux vi/vim处于insert模式ESC无法退出且无反应
C语言编译过程:
预处理:去掉注释、加载头文件、替换宏定义、不进行语法检查

 cpp -o a.i 001.c(.c文件>.i文件)
 gcc -E

编译

 gcc -S(.c文件>.i文件>.s文件)

汇编

gcc -c(.c文件>.i文件>.s文件>.o文件)

链接

gcc -o(.c文件>.i文件>.s文件>.o文件>build 可执行文件)
例:gcc -o build 001.c 

linux终端执行命令

./build
在当前文件夹下执行build文件

注意:define、include不是关键字(YU)

C语言常见错误
一.预处理错误
1.
#include “name” 当前目录下寻找/自定义文件
#include< name > 在系统环境变量中寻找/不在当前目录中寻找

not find
abc.h: No such file or directory
#include <abc.h> 错 //自定义头文件
#include"abc.h"  对

若.h头文件与c文件不在一个文件夹而是在在当前目录的inc文件夹内:

1.#include <./inc/abc.h>
2.gcc -I./inc -o build 001.c

二.编译错误
语法错误

{ }

三.链接错误
1.原材料不够

undefined reference to ‘fun’
寻找标签是否实现了,链接时是否一起加入了链接

2.原料多了

multiple definition of ‘fun’
多次实现了标签,只保留一个标签实现。

3.怎么将两个.c文件合一链接

1.gcc -o build fun.c 001.c
or2.gcc -c -o  a.o 001.c
gcc -c -o b.o fun.c
gcc -o build a.o b.o

预处理的使用
1.

#include   包含头文件
#define //(替换不进行语法检查)(宏名一般大写)#define 宏名 宏体 // (注意加括号)eg:  #define ABC 5+3printf("the %d\n",ABC*5)#define ABC (5+3)printf("the %d\n",ABC*5)
#define ABC(x)  (5+(x))  //宏函数

条件预处理


#ifdef
#else
#endif
eg:
#define ABC 0 //只要定义了ifdef就通过int main()
{
#ifdef ABCfunction();
#endif
}

预定义宏(系统定义宏)

__宏名__
__FUNCTION__ //函数名
__LINE__     //行号
__FILE__     //文件名
printf("the %s,%s,%d",__FILE__,__FUNCTION__,__LINE__)//打印当前行所在文件、函数和行号

宏展开下的#、##

#:字符串化
#include<stdio.h>
#define ABC(x) #x
int main()
{printf(ABC(ab123));return 0;
}

##:连接符号(前缀)

#include<stdio.h>
#define DAY(x) myday##x
int main()
{int myday1=10;int maday2=20;printf("the day is %d ",DAY(1)); //DAY(1)==myday1 return 0;
}

关键字概念
关键字一共32个
关键字是编译器预先定义了一定意义的字符串。

关键字sizeof():编译器给我们查看变量内存空间容量的工具(单位:字节)(不是函数,底层可直接调用

#include<stdio.h>
int main()
{int a;printf("the a is %lu\n",sizeof(a);return 0;
}

关键字return :返回值

C语言操作:资源/内存(内存类型资源,eg:lcd、led)
C语言如何描述这些资源的属性呢?资源属性之一资源的大小,并使用关键字数据类型)定义大小。

数据类型关键字:
char  1字节
int   4字节
long  4字节 OR 8字节
short  2字节 
unsignedsigned
floatdouble
void
注意:关键字代表几字节由编译器决定

char
硬件操作的最小单位 :bit(比特) 1/0
软件操作的最小单位:8bit ==1B(1字节)
网速4M ==4Mbit ==500kB
应用

  1. 通信中1次8bit char buf[ ] √ int buf[ ] ×
  2. ASCII码 8位 256个数(0-255)

int
大小由编译器决定,编译器最优的处理大小:系统一个周期所能接受的最大处理单元,int
32bit 4B int
16bit 2B int

unsigned、signed
无符号:数据(一段内存空间)
有符号:数字(加减乘除,移位时符号位不变)
区别内存空间中最高字节 是符号位还是数据位
char a = 0xff (-128)
unsigned char a =0xff (256)

float、double
float 4B
double 8B
浮点数与整数在内存中的表示形式不同
浮点型常量
1.0、1.1 (double)
1.0f (float)

void
占位标准/声明标志

自定义数据类型(还是关键字)

C编译器默认定义的内存分配不符合实际资源的形式
自定义 = 基本元素之和

struct 结构体
union 共用体
enum 枚举
typedef 定义别名

struct
元素之间的和

定义一种内存空间(下面这种写法不占用内存空间,只是定义/声明了数据类型)
eg:
struct myacbd{unsigned int a;unsigned int b;unsigned int c;unsigned int d;
}
struct myabcd mybuf;//占用了内存空间,//将 mybuf定义为myabc这样类型的内存

注意:结构体中数据之间的顺序有意义。

union 共用体

技巧性强

union共用起始地址的一段内存
/*声明一个union,不占用内存空间*/
union myabc{ char a;int b;
}
/*使用一个union,占用内存空间*/
union myabc abc; //将abc定义为myabc这样类型的内存
unionstruct的区别
一个struct中不同数据的地址是首位相连的(这一个的首地址与上一个的尾地址相连)
一个union共用起始地址的一段内存(共用体中的前后数据可能会产生干涉)

enum 枚举
可用性低

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

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

相关文章

golang windows 环境搭建 环境配置

golang windows 环境搭建 环境配置 Golang学习之路一环境搭建 MacBook Linux 树莓派raspberrypi安装Golang环境 官网下载地址: https://go.dev/dl/ https://golang.google.cn/dl/ 下载对应系统版本&#xff0c;例如windows 64位系统&#xff0c;下载&#xff1a;xxx.window…

【Langchain Agent研究】SalesGPT项目介绍(一)

【2024最全最细LangChain教程-13】Agent智能体&#xff08;二&#xff09;-CSDN博客 之前我们介绍了langchain的agent&#xff0c;其实不难看出&#xff0c;agent是更高级的chain&#xff0c;可以进行决策分析、可以使用工具&#xff0c;今天我们开始开启一些更高阶的课程&…

【算法题】95. 不同的二叉搜索树 II

题目 给你一个整数 n &#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3…

【机器学习】单变量线性回归

文章目录 线性回归模型&#xff08;linear regression model&#xff09;损失/代价函数&#xff08;cost function&#xff09;——均方误差&#xff08;mean squared error&#xff09;梯度下降算法&#xff08;gradient descent algorithm&#xff09;参数&#xff08;parame…

鸿蒙开发系列教程(十六)--日志处理

console控制台输出 以格式化输出方式打印调试信息 console.debug&#xff08;&#xff09; console.debug(‘debug。。。’ &#xff09; 以格式化输出方式打印日志信息 console.log&#xff08;&#xff09; console.log(‘info。。。’) 以格式化输出方式打印警告信息 con…

ubuntn20 搭建 redmine

安装数据库 更新包列表&#xff1a;sudo apt update 安装MySQL服务器&#xff1a;sudo apt install mysql-server 运行安全性脚本&#xff1a;MySQL服务器安装后&#xff0c;运行以下命令以加固安装&#xff1a;sudo mysql_secure_installation 这个脚本将引导您完成几个安全选…

Nginx限流设置

1.反向代理(建议先看正向代理,反向代理则是同样你要与对方服务器建立连接,但是,代理服务器和目标服务器在一个LAN下,所以我们需要与代理服务器先建交,再由他获取与目标服务器的交互,好比一个带刀侍卫守护着目标服务器) 屏蔽目标服务器的真实地址&#xff0c;相对安全性较好&am…

为什么在git操作中,要按照commit、pull、push的顺序

在Git操作中&#xff0c;按照commit、pull、push的顺序进行操作的主要原因是为了避免代码冲突和保持代码库的同步。下面是详细的解释&#xff1a; Commit: 首先进行commit操作是为了将本地的代码改动保存到一个清晰的版本历史中。这样做有几个好处&#xff1a; 你可以为这次提交…

ubuntu下修改hosts读写权限

ubuntu下修改hosts文件的操作&#xff1a; 由于需要在hosts文件下添加ip地址信息&#xff0c;但是初始情况下系统该文件为只读权限无法修改&#xff0c;具体操作如下所示&#xff1b; 1.cd到系统etc目录下&#xff0c;执行如下命令,此时会提示输入密码&#xff0c;直接输入回…

PgSQL技术内幕 - case when表达式实现机制

PgSQL技术内幕 - case when表达式实现机制 CASE表达式如同 C语言中的if/else语句一样&#xff0c;为SQL添加了条件逻辑处理能力&#xff0c;可以根据不同条件返回不同结果。PgSQL支持两种语法&#xff1a;简单表达式和搜索表达式。 1、搜索表达式 语法如下&#xff1a; CASE WH…

掼蛋牌桌上的默契-牌语解读篇

掼蛋不仅仅是个人战斗&#xff0c;也是和队友之间的默契与配合的战斗。长时间合作的玩家间往往能够通过一些特定的出牌方式传递信息&#xff0c;这些“暗号”或“牌语”成为了他们都顺利夺取胜利的秘密武器。 这些技巧都需要在日常实践中留心捕捉&#xff0c;用心理解和领悟&am…

1978-2022年各省家庭恩格尔系数(分城镇、农村)

1978-2022年各省家庭恩格尔系数&#xff08;分城镇、农村&#xff09; 1、时间&#xff1a;1978-2022年 2、指标&#xff1a;城镇家庭恩格尔系数、农村家庭恩格尔系数 3、来源&#xff1a;统计年鉴、省统计公报 4、范围&#xff1a;31省 5、指标解释&#xff1a;恩格尔系数…

springboot整合rabbitmq,及各类型交换机详解

RabbitMQ交换机&#xff1a; 一.交换机的作用 如果直接发送信息给一条队列&#xff0c;而这一消息需要多个队列的的多个消费者共同执行&#xff0c;可此时只会有一个队列的一个消费者接收该消息并处理&#xff0c;其他队列的消费者无法获取消息并执行。所以此时就需要交换机接…

如何使用phpStudy搭建网站并结合内网穿透远程访问本地站点

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

飞马座卫星

1960年代马歇尔太空飞行中心的历史显然与建造土星五号月球火箭有关。然而&#xff0c;鲜为人知的是该中心在设计科学有效载荷方面的早期工作。 Fairchild 技术人员正在检查扩展的 Pegasus 流星体探测表面。Pegasus 由马里兰州黑格斯敦的 Fairchild Stratos Corporation 通过马歇…

Verilog刷题笔记22

题目&#xff1a; Build a priority encoder for 8-bit inputs. Given an 8-bit vector, the output should report the first (least significant) bit in the vector that is 1. Report zero if the input vector has no bits that are high. For example, the input 8’b100…

springboot164党员教育和管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

gh0st远程控制——客户端界面编写(四)

本节任务点 ◉ 为所有菜单项添加测试响应函数 ◉ 添加删除列表指定条目的功能 为所有菜单项添加测试响应函数&#xff1a; 添加菜单响应函数&#xff1a; void CPCRemoteDlg::OnOnlineCmd() {if (TEST_MODE) {MessageBox("终端管理界面");} }void CPCRemoteDlg:…

Linux内核与驱动面试经典“小”问题集锦(3)

接前一篇文章&#xff1a;Linux内核与驱动面试经典“小”问题集锦&#xff08;2&#xff09; 问题4 问&#xff1a;既然spin_lock可以在进程上下文和中断上下文中使用&#xff0c;那么一旦进入中断&#xff0c;被自旋住&#xff0c;那么CPU岂不是被死锁住了&#xff1f; 备注…

Linux 研究文件描述符fd的分配规则

目标&#xff1a;研究fd的分配规则 方式&#xff1a;做实验 我们写一段代码&#xff0c;需要实现的功能如下&#xff1a;利用系统调用接口实现读入字符&#xff0c;并且把读入的字符打印在屏幕上。 实验1 我们需要用到read()函数。 read是系统调用接口&#xff0c;头文件和…