c语言sint16,算法篇(PID详解).pdf

本文档详细介绍了PID控制算法,包括比例、积分、微分的作用,并提供了数字PID的C语言编程实现。通过生活实例和理论分析,帮助读者快速理解PID原理,适用于初学者。着重讲解了数字PID的离散表达式,为实际应用提供指导。

前言说明

控制的方法远远不止PID这一招,在许多场合也未必是最佳的控制算法 对于学习能力较好的师弟也可以再去寻

求一种更优秀的控制算法 PID的分类多如牛毛,例如:模糊PID、数字PID、神经元PID等等 另外,本文档是参考

几十个PID相关文档资料整合而成 由于个人能力等原因,从策划、编辑、排版等花了一个多月的时间才完成此次PID

算法的整合

为了更有针对性和有效性,本文档主要讲解数字PID及其变种 (改进式PID):位置式和增量式 以及这两种PID

的C语言编程实现、参数的调整确定和PID控制的应用

我们为什么要用PID算法呢?原因很简单:

其一,PID是一种比较成熟的控制算法,而且还有许多基于PID的变种算法(简称改进式PID)

其二,资料多,学习难度降低,入门快

其三,多届师兄实践过,感觉效果还不错!但每年资料成指数增长,从上届师兄那拷贝了好几G资料,讲PID

控制的文档可以夸张的说跟天上的 “星星”一样,看了之后眼花缭乱,而且有很多重复的

为了让更多人能快速上手使用PID控制算法,结合个人经验和相关文档将它浓缩如下:

一、什么是PID控制?

由易到难、从简到繁、结合现实和理论带你入门PID算法。以下从两个方面进行介绍:

1.1用生活实例谈PID,让你有个感性的认识:

1)比方说桌子上放个物体,样子像块金属,巴掌大小。你心里会觉得这个物体比较重,就用较大力量

去拿,可是这个东西其实是海绵做的,外观被加工成了金属的样子。手一下子 “拿空了”,打住了鼻子

这是怎么回事?比例作用太强了。导致你的大脑发出指令,让你的手输出较大的力矩,导致 “过调”

2)还是那个桌子,还放着一块相同样子的东西,这一次你会用较小的力量去拿。可是东西纹丝

不动。怎么回事?原来这个东西确确实实是钢铁做的。刚才你调整小了比例作用,导致比例

作用过弱。导

<think>我们正在讨论C语言中的SINT和INT的区别。根据引用内容,SINT是通过typedef定义的有符号整数类型,而INT是C语言标准中的基本整数类型。下面详细展开: 1. **数据类型定义方式不同**: - `INT`是C语言标准中的基本数据类型,直接使用`int`声明变量,例如: ```c int a = 10; ``` - `SINT`通常是通过`typedef`定义的别名,可能是为了增加可读性或跨平台一致性。例如: ```c typedef int SINT; // 将int重命名为SINT SINT b = 20; // 使用SINT声明变量 ``` 2. **与const结合时的语义差异**(根据引用[1]): - 使用`#define`定义指针类型与使用`typedef`定义指针类型时,`const`修饰的对象不同。 - 引用[1]中的例子: - `#define PINT int*` 时,`const PINT b` 相当于 `const int* b`(指向常整数的指针)。 - `typedef int *SINT;` 时,`const SINT c` 相当于 `int* const c`(指向整数的常量指针)。 - 注意:这里讨论的是指针类型的情况。如果`SINT`被定义为非指针(如`typedef int SINT;`),则`const SINT`与`const int`相同。 3. **数据范围与底层表示**(引用[2]): - `int`在Visual C++中通常占4字节(32位),范围是$-2^{31}$到$2^{31}-1$。 - `SINT`作为`int`的别名,其范围与`int`完全相同。 - 但要注意,不同平台下`int`的大小可能不同(如16位系统中占2字节),而`SINT`作为别名会随之变化。 4. **类型转换**(引用[3]的启示): - `SINT`和`int`本质相同,因此互相赋值无需显式转换: ```c SINT s = 10; int i = s; // 合法,无警告 ``` 5. **使用场景**: - `int`:标准整数类型,用于通用计算。 - `SINT`:通常用于代码可读性、平台适配(如通过typedef统一调整整数类型)或避免复杂指针声明中的歧义。 **总结区别**: | 特性 | `int` | `SINT`(假设定义为`typedef int SINT;`) | |--------------|--------------------------------|------------------------------------------| | 定义方式 | 语言内置关键字 | 通过typedef定义的别名 | | 存储大小 | 平台相关(通常4字节) | 与`int`相同 | | 数值范围 | $-2^{31}$到$2^{31}-1$(32位) | 与`int`相同 | | const语义 | `const int`(常量整数) | `const SINT`(常量整数) | | 指针类型声明 | `int* p;` | `SINT* p;`(等同于`int* p;`) | 若`SINT`被定义为指针(如`typedef int* SINT;`),则: - `SINT`是指向`int`的指针类型,而`int`是整数类型。 - 此时二者完全不同:`SINT`用于声明指针变量,`int`用于声明整数变量。 因此,回答用户问题需要澄清:**用户提到的SINT具体是如何定义的?** 根据上下文,用户可能指的是非指针的整数类型(即`typedef int SINT;`),此时区别主要在定义方式,而数据特性相同。 --- §§相关问题§§: 1. 在C语言中,typedef和#define定义类型别名有什么区别? 2. 如何确保C语言代码中的整数类型在不同平台具有一致的大小? 3. 为什么有时需要为int类型定义别名(如SINT)? </think>### C语言SINT与INT的区别详解 #### 1. **定义方式不同** - **INT**:C语言标准内置的基本整数类型,直接使用关键字声明: ```c int num = 10; // 标准整型声明 ``` - **SINT**:通过`typedef`定义的**类型别名**,通常代表有符号整数,但本质是自定义标签: ```c typedef int SINT; // 定义SINT为int的别名 SINT num = -5; // 使用别名声明 ``` 引用[1]的关键说明: > `typedef`将`SINT`视为**单一实体**而非`int`和`*`的组合,影响`const`等修饰符的作用对象[^1]。 #### 2. **const修饰语义差异(核心区别)** 当与指针结合时,二者的`const`行为截然不同: - **INT指针的const修饰**: ```c const int* p; // p指向的值不可变(*p只读) int* const p; // p的指向不可变(p只读) ``` - **SINT指针的const修饰**(引用[1]的解释): 若定义为`typedef int* SINT;`,则: ```c const SINT p; // 等价于 int* const p(指针p本身只读) ``` > 因为`typedef`将`SINT`视为整体,`const`直接修饰指针变量而非指向的值[^1]。 #### 3. **数据范围与存储** - 二者底层存储相同(引用[2]): 在32位系统中均占**4字节**,范围均为$-2^{31}$ 到 $2^{31}-1$(即$-2147483648$ 到 $2147483647$)。 - 无本质数值差异(引用[3]): ```c SINT s = -100; int i = s; // 直接赋值,无精度损失 ``` #### 4. **使用场景对比** | 特性 | INT | SINT(typedef int SINT) | |------------|------------------------------|--------------------------------| | **本质** | 语言原生类型 | 类型别名 | | **可读性** | 通用 | 强调"有符号整数"的语义 | | **扩展性** | 固定 | 可统一修改底层类型(如改为`long`) | | **指针修饰**| 需显式指定`const`位置 | `const`默认修饰指针变量本身 | #### 5. **操作示例** ```c #include <stdio.h> typedef int SINT; int main() { // 基本操作相同 INT a = 10; SINT b = -20; printf("Sum: %d\n", a + b); // 输出-10 // const修饰差异示例 typedef int* P_SINT; const P_SINT p1 = &a; // 等价于 int* const p1(指针只读) const int* p2 = &b; // 指向的值只读 *p1 = 30; // 合法:修改指向的值 p1 = &b; // 错误!p1指针本身只读 *p2 = 40; // 错误!*p2值只读 p2 = &a; // 合法:修改指针指向 return 0; } ``` #### 总结 - **相同点**:数值存储、计算行为一致。 - **核心区别**: - `INT`是语言原生类型 - `SINT`是类型别名,**影响`const`在指针声明中的修饰对象**(引用[1]机制)。 - **建议**: 使用`SINT`可增强代码可读性,但在指针操作中需警惕`const`修饰符的语义差异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值