嵌入式学习(一)嵌入式c语言

article/2025/10/23 0:20:42

第一章.c数据类型及语句

1.01 第一个c程序的编写

        下载好VScode并配置好环境,可以开始进行第一个c程序的编写。

#include <stdio.h>int main(int argc,char *argv[])
{printf("Hello World!\n");return 0 ;
}

        需要注意的几点:

                1.#include<stdio.h>头文件包含一定要有 

                2.每一个c语言程序有且只有一个main函数这是整个程序的开始位置

                3.c语言中的括号和冒号都是成对出现的且都是英文符号

                4.c语言中的语句必须要以分号结尾

                5.//为注释

        此为运行按钮,点击即可运行程序。

        可以看到程序已经成功在终端运行,成功迈出了第一步。

1.02 数据类型相关的关键字

        关键字是c语言已经定义好的名字,直接可以拿过来使用,不需要再次定义。数据类型相关的关键字用于定义变量或者类型。

定义变量的语法结构:  类型  变量名;

        变量名属于标识符(变量名,函数名,重命名和取别名),命名规则:

        (1)只能以数字,下划线和字母命名

        (2)首字母不能是数字

        (3)不能与关键字相同

包含char,short,int,long,double,float,struct,union,enum,signed,unsigned,void等关键字

1,char 字符型 用char定义的变量属于字符型变量 占一个字节(8位)

        有符号:-2^7~+2^7-1

        无符号:0~2^8-1

        char ch1 = 'a'; ; =为赋值号

        char ch1 = ’1‘; 正确

        char ch2 = ’1234‘; 错误 ’1234‘为字符串

2,short 短整型 使用short定义的变量是短整型变量 占两个字节(16位)

        有符号:-2^15~+2^15-1

        无符号:0~2^16-1

        short int a = 11;

3,int 整型 用int定义的变量是整型变量 占四个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        int a=44;

4,long 长整型 用long定义的变量是长整型 在32位的系统下占四个字节 在64位的系统下占八个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        long int a=66;

5,float 单浮点型(实数)用float定义的变量是单浮点型的实数 占四个字节

        有符号:-2^31~+2^31-1

        无符号:0~2^32-1

        float b =3.8f;

6,double 双浮点型(实数) 用double定义的变量是双浮点型实数 占八个字节

        double b = 0.8;

7,struct 结构体类型关键字

8,union 共用体(联合体)相关关键字

9,enum 与枚举类型相关的关键字

10,signed 有符号(正负)的意思  在定义char 整型(short,int,long)数据的时候用signed修饰,代表定义的数据是有符号的,可以保存正数,也可以保存负数

        signed int a = 100;

        signed int b = -100;

注意:默认情况下signed可以省略 默认有符号类型数据

11,unsigned 无符号的意思 只能保存正数和0  在定义char 整型(short,int,long)数据的时候用unsigned修饰,代表定义的数据是无符号的

12,void 空类型的关键字

        char,int,float都可以定义变量

        void不能定义变量,没有void类型的变量

        void用来修饰函数的参数或者返回值,代表函数没有参数或者没有返回值

sizeof():是一个运算符,可以用来获取数据类型所占内存的大小

1.03存储相关关键字

register static const auto extern

1.register是寄存器的意思  用register修饰的变量是寄存器变量

        即:在编译的时候告诉编译器这个是寄存器变量,要尽量将其存储在寄存器当中。

        注意:

        (1)定义的变量不一定真的存放在寄存器当中

        (2)cpu取数据的时候从寄存器中取数据比内存中快

        (3)因为寄存器比较宝贵,所以不能定义寄存器数组

        (4)register只能修饰字符型和整型不能修饰浮点型的

        (5)因为register修饰的变量可能存放在寄存器中也可能存放在内存中,所以不能对寄存器取变量地址,只有在内存中存放的数据才有地址

2,static 是静态的意思 

        static可以修饰全局变量 局部变量 函数

        使用static修饰的变量,此变量存放在内存的静态区空间中

3,const 是常量的意思 用const修饰的变量是只读的不可以修改它的值

        const int a = 101;//在定义的时候用const修饰,并赋初值为101,从此以后就不能给a赋值了,const也可以修饰指针

4,auto

        auto int a; 和 int a;是等价的,现在基本不用auto

5,extern 是外部的意思,一般用于函数和全局变量的声明

1.04控制语句相关的关键字

条件控制语句:

        if语句:if else

        switch语句:switch  case default

循环控制语句:

        do while for  goto

辅助控制语句:

        break continue

1.05其他关键字

sizeof  typedef  volatile

1,sizeof 用来测量变量 数组的储存空间大小(字节数)

        例:int a;

               int num;

                num = sizeof(a);

                print(“num = %d”,num);

2,typedef  重命名相关的关键字 作用是给一个已有的类型,重新起一个类型名,并没有创造一个新的类型。

        1.用想起名的类型定义一个变量

        short int a;

        2.用新的类型名代替变量名

       short int INT16;

        3.在最前面加上typedef

        typedef short int INT16;

        4.然后就可以用新的类型名定义变量了

        INT16 b;和short int b;是一个效果

3,volatile 易改变的意思 

用volatile定义的变量是易改变的,即告诉cpu每次用volatile变量的时候重新去内存中取 保证用的是最新的值而不是寄存器中的备份 现在极少使用

1.06 基本类型

char,int,short,long,float,double

#include <stdio.h>int main(int argc,char *argv[])
{   //定义一个char类型的变量并赋值   输出用%cchar a = 'w';printf("a = %c\n",a);//定义一个short类型的变量并赋值short b = 100;printf("b = %d\n",b);//定义一个int类型的变量并赋值  输出用%dint c = 100;printf("c = %d\n",c);//定义一个long类型的变量并赋值 输出用%ldlong d = 151514;printf("d = %ld\n",d);//定义一个float类型的变量并赋值 输出用%ffloat e = 3.048454465;printf("e = %f\n",e);//定义一个double类型的变量并赋值 输出用%lfdouble f = 4561.481564156;printf("f = %lf\n",f);return 0 ;
}

代码运行结果正常,需要注意的是float和double类型的变量最多到小数点后六位。

1.07构造类型

概念:由多个相同或不同类型的数据构成的集合,这种数据类型被称为构造类型。

数组,结构体,共用体,枚举

1.08变量和常量的基本认识

常量:在程序运行过程中,值不可以改变的量

例:100,“a”,“hello”

常量的分类:

        整型:100,125,-100,-125

        实型:3.12,0.125f,-3.7985

        字符型:“a”“b”“2”

        字符串:“abcd”“1234”

        ASCII码表:对于计算机而言只能识别二进制的数字,对于非数字的数据,如果要使用,就需要将其用一个数字型数据进行标识,就称之为ASCII码表。

#include <stdio.h>int main(int argc,char *argv[])
{//注意在使用字符类型的数据时 %c输出字符%d输出ascii值char ch1='w';printf("%c %d",ch1,ch1);char ch2 = 115;printf("%c %d",ch2,ch2);return 0 ;
}

 执行代码结果如图所示

变量:其值可以改变的量叫做变量

定义变量的方式:

        存储类型 数据类型 变量名;

        存储类型 数据类型 变量名 = 变量或者常量;

变量在定义的时候要满足标识符的命名规则

        (1)只能由字母数字下划线组成

        (2)首字母不能是数字

        (3)不能关键字相同

1.09常量和变量按照类型区分

整型数据

        整型常量:(按进制分)

                十进制:以正常数字1~9开头 如457 45120

                八进制:以数字0开头 如0123

                十六进制:以0x开头 如0xle

        整型变量:

                有/无符号短整型(un/signed)short (int) 两个字节

                有/无符号基本整型(un/signed)int 四个字节

                有/无符号长整型 (un/signed)long int 四个字节(32位处理器中)

实型数据

        实型常量:实型常量也称之为实数或者浮点数

                十进制数形式:0.0 0.12 5.0 

                指数形式:123e3表示123乘以10的三次方

                         123e-3表示123乘以10的负三次方

                不以f为结尾的是double类型

                以f为结尾的是float类型

        实型变量

                单精度(float)和多精度(double)

                float型:占四个字节,7位有效数字,指数-37~38

                double型:占八个字节,16位有效数字,指数-307~308

字符数据

        字符常量:

                直接常量:用单引号括起来,如’a‘,’b‘

                转义字符:以反斜杠'\'开头,后面跟一个或几个字符,如'\n''\t'等,分别代表换行,换向跳格

        字符变量:

                用char定义,每个字符变量被分配一个字节的内存空间

                字符值以ascii码的形式存放在变量的内存单元中

        字符串常量:由双引号括起来的字符序列,如“哈哈哈”“abcd”

字符串常量与字符常量的不同:

        ’a‘为字符常量 “a”为字符串常量

        每个字符串的结尾,编译器都会自动添加一个结束标志位’\0‘

        即“a”包含了两个字符’a‘和’\0‘

1.10格式化输出字符

        %d 十进制有符号整数

        %ld 十进制long有符号整数

        %u 十进制无符号整数

        %o 八进制表示的整数

        %x 十六进制表示的整数

        %f float型浮点数

        %lf double型浮点数

        %e指数形式的浮点数

        %c 单个字符

        %s 字符串

        %p 指针

        使用%#o可以输出八进制数的前导符。

        使用%#x可以输出十六进制数的前导符。

1.11格式化输出字符的特殊应用

%3d   %03d   %-3d  %5.2f

%3d:要求宽度为3位,如果不足三位,前面空格补齐,若足够三位则无效

%03d:要求宽度为3位,如果不足三位,前面用0补齐

%-3d:要求宽度为3位,如果不足三位,后面补齐

%5.2f 宽度为5位,小数点保留后两位

1.12 类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及类型转换问题。

转换的方式有两种:自动转换:遵循一定的规则,由编译器系统自动完成。

                              强制类型转换:把表达式的运算结果强制转换成所需要的数据类型

自动转换的原则

        1.占用内存字节较少的类型转换成占用内存字节较多的类型,以保证精度不降低。

        2.转换方向:

强制转换

通过类型转换运算来实现

        (类型说明符)(表达式)

在不同的情况中使用不同的关键字即可,一切需求来源于实际,由于之前没有一条完整的线将这一章穿起来,所以才有了这一篇幅的笔记,与君共勉。


http://chatgpt.dhexx.cn/article/UyT372Ot.shtml

相关文章

嵌入式学习难吗?

首先来说&#xff0c;学习任何一门技术都有它难的地方。如果说嵌入式学习难&#xff0c;那它就难在于嵌入式知识比较综合&#xff0c;比如C语言、数据结构、通信原理、单片机、数字电路、 arm体系、驱动开发、系统移植、Lora&#xff0c;NB-IOT等&#xff0c;大学里开过很多课都…

嵌入式学习(一)—— 初步认识

嵌入式学习&#xff08;一&#xff09;—— 初步认识 一、认识嵌入式二、嵌入式学习内容1.C语言学习2. 模拟电路&#xff0c;数字电路基础- 模拟电路- 数字电路 3. 硬件知识掌握4. 裸机开发5. 认识使用外设模块6. OS学习7.Linux开发板学习8.应用层学习9. PCB学习 三、推荐网站及…

嵌入式学习笔记

ARM &#xff1a;Advanced RISC Machine RISC&#xff1a;精简指令集 EMCU&#xff1a;Embedded Micro Controller Unit 嵌入式微控制器 EMPU &#xff1a;Embedded Micro Processor Unit 嵌入式微处理器 EDSP &#xff1a;Embedded Digital SIgnal Process 嵌入式数字信号处理…

嵌入式之学习路线

入门必看&#xff1a;https://www.xianjichina.com/news/details_69907.html IC设计&#xff0c;FPGA&#xff0c;射频&#xff0c;EMC&#xff0c;电气工程 ******嵌入式开发的相关硬件基础&#xff1a;对于软件工程专业的学生&#xff0c;从事嵌入式软件开发&#xff0c;像…

嵌入式学习路线,强烈推荐!!!

最近有小伙伴在微信私信我&#xff0c;如何学习嵌入式。一直想写一篇学习路线的文章&#xff0c;由于各种原因拖到了现在。 下面就如何学习嵌入式说下我个人的看法。 01 什么是嵌入式&#xff1f; 嵌入式即嵌入式系统&#xff0c;IEEE&#xff08;美国电气和电子工程师协会&am…

嵌入式学习笔记——概述

嵌入式系统概述 前言“嵌入式系统”概念1.是个啥&#xff1f;2.可以干啥&#xff1f;3.有哪些入坑方向&#xff1f;4.入坑后可以有多少薪资&#xff1f; 单片机1.什么是单片机&#xff1f;2.架构简介3.基于ARM架构的单片机结构简介 总结M4系列目录 前言 断更很长时间了&#x…

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了&#xff0c;在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

嵌入式软件学习路线(入门)

大家不要只收藏不关注啊&#xff0c;哪怕点个赞都行哇。&#x1f62d; 嵌入式学习路线 嵌入式体系框架C语言的入门学习C语言的进阶学习单片机的入门学习linux的入门学习VxWorks的入门学习上位机的入门学习 刚工作两年&#xff0c;推荐的学习路线只做一家之言&#xff0c;如果…

嵌入式学习基础路线

博主来填坑了 博主终于硕士毕业拿到双证去公司报道了&#xff0c;趁空闲的时间来更新下嵌入式软件开发的学习路线。 嵌入式的学习 嵌入式总的来说就分两条路线&#xff1a;1&#xff09;走MCU的软件开发的路线&#xff1b;2&#xff09;走Linux的软件开发路线。 当然除了软…

嵌入式操作系统(嵌入式学习)

嵌入式操作系统 嵌入式操作系统是什么&#xff1f;嵌入式操作系统有哪些&#xff1f;常用的嵌入式操作系统及其特点对初学者的建议 嵌入式操作系统是什么&#xff1f; 嵌入式操作系统是一种专门设计和优化用于嵌入式系统的操作系统。它是在资源受限的嵌入式设备上运行的操作系…

嵌入式入门学习的必要步骤

很多新手在入门嵌入式的时候&#xff0c;经常会有很多问题&#xff0c;这也都是想要多多去了解嵌入式&#xff0c;也害怕自己浪费了时间还没有学会嵌入式&#xff0c;掌握到好方法学习嵌入式&#xff0c;那么就会事半功倍&#xff0c;下面一起来看看嵌入式入门学习的必要步骤是…

嵌入式系统学习

Lecture11-12 主要学习 ➢ 总线基础 ➢ UART协议 ➢ I2C协议 ➢ SPI协议 1.总线的基础 protocol 协议 总线只是一组导线的集合&#xff0c;在嵌入式板上的所有其他主要组件&#xff08;包括I/O子系统、内存子系统和主处理器&#xff09;之间传输各种数据信号、地址和控制…

嵌入式要学习哪些内容?

嵌入式要学习哪些内容&#xff1f; 嵌入式概括一下就是写程序&#xff0c;用软件控制硬件。嵌入式的学习应该是自上而下的。 1.语言先行 首先是写代码&#xff0c;写用户的应用程序。每种语言的使用目的是不同的&#xff0c;我们嵌入式选择的语言是C语言。 所以首先要学习C语言…

【嵌入式】超详细的嵌入式路径学习精选合集,建议收藏

超详细的嵌入式路径学习精选合集&#xff0c;纯干货&#xff0c;建议收藏&#xff01; 本合集归类汇总了嵌入式开发技术相关的学习路径、知识与经验总结&#xff0c;以及一些源码、资料分享等。将其分类列出目录&#xff0c;一来为了避免有些知识长时间不用&#xff0c;会很容…

【毕业季|进击的技术er】作为一名职场人,精心总结的嵌入式学习路线图

活动地址&#xff1a;毕业季进击的技术er 文章目录 0、作者介绍1、前言2、嵌入式基础必备知识2.1、学习内容2.2、学习建议2.3、学习资料 3、嵌入式入门篇——51单片机3.1、学习内容3.2、学习建议3.3、学习资料 4、STM32进阶篇4.1、学习内容4.2、学习建议4.3、学习资料 5、小而美…

【单片机/嵌入式】最完整学习路线

一.什么是单片机&#xff1f;什么是嵌入式&#xff1f;它们之间的区别与联系。 关于这个问题我在网上寻找到了相关文章解释得很详细&#xff0c;不了解的同学可以参考一下这篇文章&#xff1a;到底什么是嵌入式&#xff1f;什么是单片机&#xff1f; - 知乎 二.学习路线 一个人…

STM32理论 —— 看门狗

文章目录 1. 简述2. 独立看门狗 IWDG2.1 IWDG 相关寄存器2.1.1 键值寄存器IWDG_KR2.1.2 预分频寄存器IWDG_PR与重装载寄存器IWDG_RLR 2.2 核心代码 1. 简述 STM32 内部自带了 2 个看门狗&#xff1a;独立看门狗&#xff08;IWDG&#xff09;和窗口看门狗&#xff08;WWDG&#…

STM32看门狗配置说明

系统时钟&#xff1a; The WWDG clock is prescaled from the APB clock and has a configurable time-window that can be programmed to detect abnormally late or early application behavior. /** defgroup WWDG_Prescaler WWDG Prescaler* {*/ #define WWDG_PRESCALER_1…

看门狗要素以及stm32看门狗

阅读看门狗资料&#xff0c;要把握以下部分 原理图复位CPU条件使能以及关闭看门狗喂狗&#xff08;方式 时间&#xff09;寄存器Debug模式下是否使能stm32包括2个看门狗&#xff0c;拥有不同的时钟 内置 low-speed clock (LSI 40KHZ) &#xff0c;用于 Independent watchdog …

STM32 CubeMX 看门狗

文章目录 看门狗STM32的内置看门狗WWDG-窗口看门狗CubeMX操作步骤1&#xff09;使能 WWDG时钟2&#xff09;设置窗口值 ,分频数 和计数器初始值3&#xff09;开启 WWDG4&#xff09;使能中断通道并配置优先级&#xff08;如果开启了 WWDG中断&#xff09;5&#xff09; 编写中断…