浅谈C语言及其应用

时间:2024-03-11 17:41:39

大纲

         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

      语言只是工具,重要的是思想。其实我并不想要从事软件这一行列,我想要探索自然科学,而不是程序。我的论文选题

可能会做些改变,我向往的是自然科学,语言只是工具,语言只是工具,语言只是工具。!!!!!