大纲
C语言的概述
C语言的设计理念
应用
编程技巧
C语言的概述
C语言其主要应用于底层系统,如计算机操作系统,单片机等,与C++区别的是面向过程的语言。举个例子
,你要去喝水。首先你要烧水,然后等水开了,然后你倒水,再喝水,每一个步骤你都要用程序表达。而C++存
在类的概念,类似事物之间不需要重复定义。
C语言的优点在于其代码简洁明了,仅仅产生少量的机器码以及其跨平台移植性,可以在mac、window
和linux之间切换,对于科研人而言最重要的matlab就是C语言写的。
C语言的设计理念
1. 数据类型
当用户定义变量的数据类型,系统就为该变量定义了内存空间。
整形或精度型 至于内存空间的大小,由其选择的数据结构有关,不同数据结构在不同位计算机中占
用内存不同。如果你想让运算数据存在小数,就不能用int或char型,只能用single或double,如果你想输入
名字等字符,只能用string类型。这就是为什么有些计算机说达到多少浮点等等。
2. 数据类型
数组 其 为了描述有限个数的组成而存在,一般该内容是固定的,实际应用中,在单片机中点亮流
水灯的操作。配合结构体函数实现不同类型的相同属性的配置。在通信协议Canopen中存在一种对象字典
的的数组,其中采用宏定义的数组结构的形式实现相应功能。特别的,其内存是连续的,所以可以通过下标
索引的方式实现相应的功能。缺陷是其想插入某一个值时候需要移动所有的值,造成资源的浪费。
结构体 如果数据结构有相同的属性,则可以使用结构体类型定义,如想描述物体的长宽高,这个可
以归为一类。
指针 是C语言的灵魂,其基本作用是间接操作变量。对于数组而言,其可以配合数组进行移位操作(因
为数组名称就是数组的首地址)。同样其在子函数以结构体为形参的函数中,如果该结构体是指针型,则起到
传递地址的作用。而单纯以结构体为形参的函数本身是传值函数,不能影响主函数中结构体成员本身的值。
共同体:结构体成员占用同一片内存,其成员中任意一个被赋值,其他成员值相同,其占用的内存由其最
大的内存决定。常常结构体配合共同体实现相应的操作。
链表: 产生的原因源于数组插入和删除一个值需要操作重复的步骤。包含数据和下一个数据的地址指针。
3.编译方式
1.宏定义相关常数,函数等
2.预编译等方式
4. 运算方式
1).逻辑运算 &&、||、! ,条件逻辑,用来判断真假,返回值只有ture or false
2).算术运算 +、-、*、/、%
3).比较运算符 >、<、=、!=、..
4) . 单目运算符 ++i、i++、i--、--i ,对于++前,先加(减),再赋值
5) . 复合运算符 +=、-=、/=、*=、%=
特别的,在单片机操作中,需要用到位运算,即布尔运算。
&(与) 、|(或) 、^(异或) 、-(取反) 、<<(左移) 、>>(右移),
其中异或非常特别,相同为0,不同位1,特别是在控制单片机领域,特定引脚中起到关键作用。
0⊕0=0; 0⊕1=1; 1⊕0=1; 1⊕1=0;
如00100001 想要第1位和第2位(c语言角度)反转,则只需要00100001^00000110即可=00100111
模式
顺序、选择和循环,实现所有的逻辑运算。
其中while分为do while 和while do,区别在于前者不需要判断就可以执行相关程序。
4. 一般算法
冒泡算法,C语言中最经典算法之一,其一般流程体现计算机运算的基本逻辑,通过样本中的数据互相之间的比较得以实现。每一次都会得到
一个当前样本中最大或最小值,直至1未知。在程序实现上使用双for即可实现。
递归,自己调用自己本身,没有指明函数本身,通过未知推导已知的过程。
迭代,同样是自己调用自己,但是指定函数本身,这一次的函数值为下一迭代的自变量。直到其到达相应迭代次数或相应要求为止。
PID: 比例积分微分等概念,常用于电机控制。
应用
单片机中应用
以点亮一个灯为例,选择STM32作为处理芯片,采用HAL库开发模式,实现引脚基本功能配置。
配置相应引脚,如下图所示是相应原理图。
在STM32CUBEMX进行相应引脚和时钟配置(HSE 8MHZ)。
选择程序排列顺序
然后在keil中生成相应的函数,下面解读其生成的函数。
1.首先是GPIO引脚初始化子程序
该程序使用了结构体函数,图中GPIOB 本身作为指针存在,因而不需要取地址符。
2.生成相应外设的时钟,STM32CUBEMX生成在main.c函数中,由于该外设挂载在APB2上,如下图所示。
编程技巧
1.将驱动文件的头文件和全局变量发到一个头文件中,可以命名为includes.h,这样方便调用或者关闭和开启。
2.头文件中只放需要调用的函数,宏定义一些变量。
3.C语言编程尽量采用结构体的方式,能够使代码阅读方便以及减少变量的定义。
4.队列的方式处理数据。
2021-06-22/ 19:05:37
感悟:任何一门语言只是工具,重要的是去实践。回顾大学中学习的语言,有机械制图,液压制图,PLC梯形图,
数控编程语言,C、C++、MATLAB,甚至是英语,重要的是在于实践,解决实际问题。
还有最大的问题是语言本身是如何带动硬件的?通过所谓的指令集?希望今后能够感悟。
2021-09-24/1:12:28
2021-11-05
语言只是工具,重要的是有想法,在写程序之前需要设计流程图,写完程序需要会调试程序,找到程序的bug。
其实我向往的的机构设计+电路设计+程序设计+芯片设计,人生路漫漫,其修远兮,吾将上下而求索。
2021-11-15
语言只是工具,重要的是思想。其实我并不想要从事软件这一行列,我想要探索自然科学,而不是程序。我的论文选题
可能会做些改变,我向往的是自然科学,语言只是工具,语言只是工具,语言只是工具。!!!!!