朝花夕拾 · C语言 | 多文件篇

全局变量使用:

1.在源文件中定义全局变量;

2.如果只是在定义该全局变量的文件中使用该全局变量,可以不声明;

3.如果要在一个外部的源文件中使用该全局变量,则该变量必须被声明;

4.在对应的头文件中加extern关键字声明,头文件中全局变量只能声明不能初始化,定义应在.c文件

        在头文件的声明里,函数默认为extern,编译器会自动加上。

  1. 预处理阶段(只认 #include
    预处理器看到 #include "ji.h",把 ji.h 里的 int get_ji(int num1, int num2); 复制过来。看到 #include "shang.h",把 shang.h 里的声明复制过来。
    此时,main.c 里只有“声明”(知道有这两个函数),但没有“定义”(不知道这两个函数具体怎么算)。

  2. 编译 + 链接阶段(关键区别)
    如果只输入 gcc main.c,编译器会报错:undefined reference to 'get_ji' 和 undefined reference to 'get_shang'。因为编译器只编译了 main.c,找不到 get_ji 和 get_shang 的具体代码(定义)。头文件只是“承诺”这些函数存在,但真正的“兑现”需要靠链接器把对应的 .c 文件编译结果合并进来。

Makefile:管理代码工程的编译和链接,由make工具进行解释,实现一键化工程的编译和链接。

文件:Makefile/makefile(文件/脚本)

语法:

          目标文件:依赖文件       

                     编译规则

目标文件:a.out

依赖文件(生成目标文件所依赖的源文件):main.c  sum.c  sub.c ......

编译规则:gcc main.c sub.c sum.c  ( -o a.out)

编译代码:make(默认只匹配makefile中的第一个参数)

a: 01_a
    gcc 01_a -o a -lpthread
b: 01_b
    gcc 01_b -o b
clean:
    rm a b

make a匹配到a则执行 gcc 01_a -o a -lpthread
make b匹配到b则执行 gcc 01_b -o b -lpthread
make clean匹配到clean则执行 rm a b

Makefile中的变量:

1.自定义变量

OBJ = a.out    //定义Makefile的变量OBJ,并为其赋值
SRC = main.c sum.c sub.c 
== SRC += main.c
   SRC += sum.c
   SRC += sub.c
CC = gcc
INCLUDE = ../include    //include"xxx"双引号里的内容只能在当前路径下访问,所以使用-I指明头文件路径
LIBS = ../lib


$(OBJ) :$(SRC)    //变量的引用:$()
    $(CC) $(SRC) -o$@ -I$(INCLUDE) -L$(LIBS) -lm
                 //-o $(OBJ) 给自定义变量起名
                 //-I头文件路径 -L指定库的位置
                 //-lm链接数学库

==
    a.out: main.c sum.c  sub.c 
    gcc main.c sub.c sum.c 


自定义伪代码:
clean:
    rm $(OBJ)    //表示clean实现移除文件功能
                    //用 make clean调用

   =:给变量赋值

   +=:在原变量值的基础上再增加新增

   ?=:  若变量之前没有被赋值则赋值,若之前被赋过值则保留原值

注意:只改头文件的话make并不会检测到头文件的修改,所以修改头文件后,需clean重新生成可执行文件,而若没在头文件中声明函数,则有时可能发生段错误。

2.系统变量

可直接使用:

$@:表示目标文件

$^ :表示所有依赖文件

$<:表示第一个依赖文件

3.

tar -cvf 文件夹.tar 文件夹 

压缩文件夹

内容概要:本文提出了一种融合模型预测控制(MPC)与人工势场法的船舶运动规划方法,旨在解决复杂海上多船遭遇场景下的避碰问题,并严格遵循国际海上避碰规则(COLREG)。该方法通过构建人工势场模型,综合考虑他船、静态障碍物、航道边界产生的排斥力以及目标点的吸引力,形成动态环境势场;同时引入MPC框架,基于船舶非线性动力学模型进行滚动时域优化,实时求解最优航向与航速指令,确保路径的安全性、平滑性与合规性。研究设计了对遇、交叉、追越及多船混杂等多种典型复杂会遇场景,并通过Matlab仿真验证了该方法在有效规避碰撞、保持航行稳定性以及准确执行COLREG规定避让行为方面的优越性能。; 适合人群:从事智能航运、海洋工程、自动驾驶船舶、智能交通系统及相关路径规划算法研究的科研人员与研究生;具备控制理论、优化算法基础及Matlab编程能力的技术开发者。; 使用场景及目标:① 实现复杂动态海况下多船智能避碰决策与自主导航;② 开发符合国际航行法规的无人船自主航行核心算法;③ 为智能港口、海上交通管理系统(SMARTS)及无人艇集群协同提供算法支持;④ 用于科研仿真验证、算法对比测试及高校相关课程的教学演示。; 阅读建议:此资源以Matlab代码实现为核心,强调理论建模与工程实践的深度融合,建议读者在深入理解MPC与人工势场耦合机制的基础上,动手运行并调试所提供的仿真程序,重点分析不同势场参数、预测时域与权重系数对避碰行为的影响,从而掌握算法的设计精髓与优化策略。
内容概要:本文围绕永磁同步电机(PMSM)在宽速域范围内的无传感器控制技术展开研究,提出了一种基于观测器异构冗余与柔性切换的复合控制策略。该策略融合高频信号注入法(适用于零低速区)与自适应滑模观测器(SMO,适用于中高速区),通过设计动态加权融合机制实现全速域内转子位置与速度的精确估计。系统在静止和低速状态下采用脉振方波高频注入实现初始定位,在中高速运行时则利用模糊超螺旋滑模观测器提升鲁棒性与动态响应性能,并引入相位同步校正与平滑切换算法以有效抑制模式切换过程中的抖动与误差累积。研究在Simulink平台构建了完整的控制系统仿真模型,全面验证了所提方法在启动精度、稳态性能、动态响应及抗负载扰动等方面的优越性。; 适合人群:具备电机控制、现代控制理论及MATLAB/Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员和工程技术人员。; 使用场景及目标:①解决永磁同步电机在无机械传感器条件下全速域运行的控制难题;②为高性能电机驱动系统(如电动汽车、精密伺服系统)提供可靠的速度与位置估算方案;③深入理解高频注入、滑模观测器、多观测器融合与平滑切换等先进控制算法的设计与实现。; 阅读建议:此资源以Simulink仿真实现为核心,不仅提供了详细的算法原理与模型架构,还包含了完整的运行结果分析。建议读者结合文中框架在MATLAB环境中动手复现仿真模型,重点关注不同速度区间下观测器的切换逻辑与参数整定过程,并通过对比实验深入理解各模块的作用机理与系统整体性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值