S12X单片机C语言基础

原码,补码,反码

关于 -128 ,+128,-0,+0,-1 的反码补码_-127+128原码-优快云博客

关于 -128 ,+128,-0,+0,-1 的反码补码 - 今天还是要喝水 - 博客园

存储器及地址

总体框架

各个部分分解

1.头文件

头文件是什么?
#include "heads.h"

#include是一个预编译命令,在编译器编译之前,把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。目的是为了共享声明的内容。

通俗地讲就是类似python里面库的导入,导入了之后就可以直接用库里面的东西了。

举个例子:

#include "xc.h"
main()
{unsigned char i,a = 0;
 i = a + 2 + b
}

//其中xc.h为下面功能
//extern unsigned char b;

//故总体代码预编译时为:
extern unsigned char b;
main()
{unsigned char i,a = 0;
 i = a + 2 + b
}

1). 头文件的扩展名是.h     

扩展名就是后缀,比如c,cpp,py,txt等

2). 头文件的内容:

变量声明: extern

宏定义:#define

结构体定义:struct

类型变义: typedef

补充:什么是unsigned?

unsigned是无符号的意思,和signed相反,signed是有符号的意思。

其实C语言中的类型基本上都是有符号类型,只是省去了signed,比如:

(signed)int --> int

  (signed char)-->char 

在了解什么是无符号之前,我们先了解一下什么是符号位:

在计算机处理二进制数据时,专门规定了一位符号位,来确定数据的正负,这个符号位通常是数据的最高位,如8比特位数据,左边第一位就是符号位,剩下七位用来表示数据大小。

在知道符号位之后就很容易理解无符号了,无符号嘛就是没有符号位,原来的符号位可以列入计算了。值得一提的是,无符号数都是非负数。

补充:变量或函数声明: extern

extern关键字是C语言中的一个修饰符,用于声明全局(外部)变量和函数的引用。该变量(或程序)是一个已经定义的外部变量(或程序)。 有了此声明,就可以从“声明”处起,合法地使用该 外部变量(或程序) 。

它用于告诉编译器,某个全局变量或函数的定义位于其他文件中。extern其实就是一个声明,明确指出一个语句是声明,比如extern int i ;这是声明变量 i,而不是定义i,定义 i 则是int i声明不开辟内存空间,而定义是要开辟内存空间的

extern关键字的基本用法:

1.全局变量声明:在文件中使用extern关键字声明一个全局变量,即使该变量在其他文件中定义。

2.函数声明:在文件中使用extern关键字声明一个函数,即使该函数在其他文件中定义

// 文件1
#include <stdio.h>
 
// 全局变量的定义
int global_var = 10;
 
// 全局函数的定义
void global_func() {
    printf("全局函数被调用\n");
}
 
// 文件2
#include <stdio.h>
 
// 使用extern关键字声明全局变量
extern int global_var;
 
// 使用extern关键字声明全局函数
extern void global_func();
 
int main() {
    printf("全局变量值: %d\n", global_var);
    global_func();
    return 0;
}

 在这个例子中,我们定义了一个全局变量global_var和一个全局函数global_func,它们分别定义在file1.cfile2.c文件中。在file2.c文件中,我们使用extern关键字声明了这两个全局变量和函数。

补充:宏定义:#define
#define WEIGHT 160

 WEIGHT是宏名,为了防止与字符串变量混淆,习惯上宏名全为大写

160是宏体,可以是常数,字符串,表达式

在程序编译时,如果编译器遇到宏名,都会用宏定义中的宏体去替换掉宏名

#define A 100
#define B 200
int main()
{
	int C = 0;
	C = A + B;
	printf("C = %d\n", C);
 
	return 0;
}

//C = 100 + 200 = 300

常用宏定义用法 

#define MAX 1000               // MAX 的大小定义为 1000
#define reg register           //为 register这个关键字,创建一个简短的名字
#define YUANXUE "猪"           //YUANXUE定义为"猪"
#define M(y) y+150             //M(y)定义为y+150  M(10)即为160
补充:类型定义: typedef

typedef关键字的作用是为现有的数据类型(int、float、char……)创建一个新的名字,目的是为了使代码方便阅读和理解,常用在结构体换名

typedef  int   NEW_INT;

以上就是给int起了一个新的名字NEW_INT,注意要加分号。当要定义int类型数据时就可以:

NEW_INT num;

此时NEW_INT num 等同于 int num。 

补充:结构体定义:struct

C语言结构体超详解(小白一看就懂,多维度分析!!!!)-优快云博客

【通俗C语言讲解】非常易懂!结构体清晰讲解!_哔哩哔哩_bilibili

定义main函数

每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,main 函数也被叫做:主函数。

●main函数是程序的入口
●main函数有且仅有一个
●即使一个项目中有多个.c文件,但是只能有一个main函数(因为程序的入口只能有一个)

main()
{
  ......
  ......
}

变量/数组定义

格式: 数据类型       变量/数组 名;

例如:        int                 a / a[3];

注意:

●与 python不同的是C/C++在定义变量/数组是要注明数据类型的

●结尾要加

●变量/数组名:由字母和数字组成,第一个字符必须是字母

补充:数据类型

补充:数组定义

数组是一组相同类型元素的集合

 数组的创建方式:

type_t   arr_name   [const_n];
//type_t 是指数组的元素类型
//arr_name 是数组的名字
//const_n 是一个常量(不可以是变量)表达式,用来指定数组的大小

//代码1
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
//代码2
//用宏定义的方式
#define X 3
int arr5[X];
//代码3
//错误使用
int count = 10;
int arr6[count];//数组时候可以正常创建?

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)

1.数组大小和数值个数一致

int arr1[5] = {1,2,3,4,5};

2.数组大小大于初始数,不足的自动补0

int arr2[6] = {1,2,3};

 3.不指定数组大小,会根据元素个数自动补上大小(4)

int arr3[] = {1,2,3,4};

4.不指定字符数组大小,自动补上(3)

char arr5[] = {'a','b','c'};
C语言中的数组(详解)_c语言数组-优快云博客

补充:共同体定义:union

C语言共用体详解_c语言共同体-优快云博客

C语言共用体(C语言union用法)详解_共同体c语言-优快云博客

补充:指针类型:*p

让你不再害怕指针——C指针详解(经典,非常详细)_c语言指针-优快云博客

【通俗C语言讲解】非常易懂!在宿舍教舍友指针实录_哔哩哔哩_bilibili

 

算术、关系与逻辑运算

1) 算术运算

+   -    *    /    %(取模运算):整数除法中的余数

2) 关系运算, 其值为真或假,分别用1和0表示

>     >=    <    <=    ==     !=    

3) 逻辑运算符,其值为真或假,分别用1和0表示

&&(与)    ||(或)      !(非)

例: (i < 3) && (a >4)

注意:区分优先级

4) 位操作运算符  

C语言之位操作符:<<、>>、&、|、^、~,以及原码反码补码和例题详解_<< >>c语言-优快云博客

 赋值与空语句

a = 3;

a *= 3; (即a=a*3, 适用于算术运算符+ - * / %)

a <<=3 即a=a<<3 适用于位运算符& | ^ >>  <<

a++或++a; (即a=a +1, 适用于自增自减运算符++ , --)

空语句: ;

三种基本程序结构

1) 顺序结构
2) 分支(选择)结构if与switch

一文读懂C语言选择语句-优快云博客

3) 循环结构

注意for(;;)与while(1)代表死循环

史上最全C语言中的各种循环结构!!!_c语言循环-优快云博客

C语言中三种循环语句(while,for,do-whlie)的用法及区别_do while语句-优快云博客

函数

C语言中的函数(超详细)_c语言函数-优快云博客

通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究(Matlab代码实现)内容概要:本文主要介绍了一项关于短时倒谱(Cepstrogram)计算在时-倒频分析中的研究,并提供了相应的Matlab代码实现。通过短时倒谱分析方法,能够有效提取信号在时间与倒频率域的特征,适用于语音、机械振动、生物医学等领域的信号处理与故障诊断。文中阐述了倒谱分析的基本原理、短时倒谱的计算流程及其在实际工程中的应用价值,展示了如何利用Matlab进行时-倒频图的可视化与分析,帮助研究人员深入理解非平稳信号的周期性成分与谐波结构。; 适合人群:具备一定信号处理基础,熟悉Matlab编程,从事电子信息、机械工程、生物医学或通信等相关领域科研工作的研究生、工程师及科研人员。; 使用场景及目标:①掌握倒谱分析与短时倒谱的基本理论及其与傅里叶变换的关系;②学习如何用Matlab实现Cepstrogram并应用于实际信号的周期性特征提取与故障诊断;③为语音识别、机械设备状态监测、振动信号分析等研究提供技术支持与方法参考; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,先理解倒谱的基本概念再逐步实现短时倒谱分析,注意参数设置如窗长、重叠率等对结果的影响,同时可将该方法与其他时频分析方法(如STFT、小波变换)进行对比,以提升对信号特征的理解能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值