嵌入式C程序基础与编程结构

Basics of Embedded C Program and Programming Structure

嵌入式C编程是处理器在我们日常生活中遇到的每一个嵌入式系统(如手机、洗衣机和数码相机)中运行的灵魂。             

每个处理器都与一个嵌入式软件相关联。首先也是最重要的是决定嵌入式系统功能的嵌入式软件。嵌入式C语言是单片机最常用的编程语言。

早期,许多嵌入式应用程序是使用汇编级编程开发的。但是,它们没有提供可移植性。这种缺点被各种高级语言如C、Pascal和COBOL的出现所克服。然而,正是C语言在嵌入式系统中得到了广泛的接受,而且它还在继续这样做。编写的C代码更加可靠、可伸缩和可移植;而且事实上,更容易理解。

关于C语言

C语言是丹尼斯·里奇在1969年开发的。它是一个或多个函数的集合,每个函数都是执行特定任务的语句的集合。

C语言是一种中级语言,它支持高级应用程序和低级应用程序。在深入讨论嵌入式C编程的细节之前,我们应该先了解RAM的内存组织。

语言的显著特点

C语言是一个用不同的关键字、数据类型、变量、常量等设计的软件。

嵌入式C是一个通用术语,它被赋予一种用C编写的编程语言,它与特定的硬件体系结构相关联。

Embedded C是C语言的一个扩展,带有一些附加的头文件。这些头文件可能会从一个控制器更改为另一个控制器。

使用微控制器8051 include<reg51.h>。

嵌入式系统设计者必须了解硬件体系结构,才能编写程序。这些程序在监视和控制外部设备方面发挥着突出的作用。它们还直接操作和使用微控制器的内部结构,如中断处理、定时器、串行通信和其他可用功能。

Differences between C and Embedded C

嵌入式软件的基本附加特性

数据类型

数据类型是指一个广泛的系统,用于声明不同类型的变量,如整数、字符、浮点等。嵌入式C软件使用四种数据类型,用于在内存中存储数据。

“char”用于存储任何单个字符;“int”用于存储整数值,“float”用于存储任何精度浮点值。

下表给出了32位计算机上不同数据类型的大小和范围。不同字号的机器的大小和范围可能不同。

有些词是专门用来完成特定任务的。这些词被称为关键字。它们是标准的,在嵌入式C中预定义。

关键字总是用小写字母写的。在编写主程序之前,必须定义这些关键字。嵌入式软件的基本关键字如下:

sbit:此数据类型用于访问SFR寄存器的单个位。

语法:sbit variable name=SFR bit;

例:sbit a=P2^1;

说明:如果我们将P2^1指定为“a”变量,那么我们可以在程序的任何地方使用“a”而不是p2.1,这样可以降低程序的复杂性。

位:该数据类型用于访问RAM(20h-2fh)的位可寻址存储器。

语法:位变量名;

例:c位;

说明:它是一个小数据区的位序列设置,程序用它来存储一些东西。

SFR:此数据类型用于通过其他名称访问SFR寄存器。所有SFR寄存器必须用大写字母声明。

语法:SFR variable name=SFR寄存器的SFR地址;

例如:SFR端口0=0x80;

说明:如果将0x80指定为“port0”,则可以在程序中的任何位置使用0x80而不是port0,从而降低程序的复杂性。

SFR寄存器:SFR代表“特殊功能寄存器”。微控制器8051具有256字节的RAM存储器。这个RAM分为两部分:第一部分128字节用于数据存储,另一部分128字节用于SFR寄存器。所有外围设备,如I/O端口、定时器和计数器,都存储在SFR寄存器中,每个元素都有一个唯一的地址。

嵌入式C程序的结构

·       comments

·       preprocessor directives

·       global variables

·       main() function

{

·       local variables

·       statements

·       …………..

·       …………..

}

·       fun(1)

{

·       local variables

·       statements

·       …………..

·       …………..

}

注释:在嵌入式C语言中,我们可以在代码中添加注释,这有助于读者轻松理解代码。              C=a+b;/*将两个值存储在另一个变量C中的变量相加*/

预处理器指令:嵌入式C软件的所有功能都包含在预处理器库中,如“includes<reg51.h>,”defines“。这些函数在运行程序时执行。

全局变量

全局变量是在主函数之前声明的变量,可以在程序中的任何函数上访问。

Global variable

局部变量

局部变量是在函数中声明的变量,它只能在该函数中使用。

Local variable

Main()函数

程序的执行从主函数开始。每个程序只使用一个main()函数。

嵌入式C程序的优点

开发应用程序所需时间较短。

它降低了程序的复杂性。

很容易验证和理解。

从一个控制器到另一个控制器在本质上是可移植的。

几个嵌入式C程序的例子

以下是一些简单的嵌入式C程序,用于基于微控制器的项目。

Example-1

Example-2

Example-3

Example-4

希望能够为嵌入式C编程的初学者提供一种简单易行的方法。更好地理解嵌入式C编程是设计基于嵌入式的项目的最基本的先决条件。除此之外,更好的理解和适当的嵌入式C编程知识有助于学生选择一个有价值的职业。

我们鼓励并欢迎读者提出疑问、建议和意见。因此,您可以在下面的评论部分发布您对本文的查询和反馈。

嵌入式C程序基础与编程结构的更多相关文章

  1. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  2. 廖雪峰Java1-2程序基础-1基本结构

    1.类名 类名首字母大写 类名必须是英文字母.数字和下划线的组合 类名必须是以英文字母开头 好的命名:Hello NoteBook VRPlayer 不好的命名:hello 跟无意义的数字Good12 ...

  3. .NET零基础入门之01:开篇及CSharp程序、解决方案的结构

    一:为什么选择C# 每个人都有梦想,有些人的梦想就是:成为程序员.最课程(www.zuikc.com)的<零基础c#入门>是试图帮助我们实现这个梦想. 也许你要问:我基础很差怎么办?最课程 ...

  4. 编写优质嵌入式C程序

    前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...

  5. 编写优质嵌入式C程序(转)

    前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...

  6. 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识

    第2章        嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...

  7. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  8. python基础-网络编程part01

    软件开发架构 C/S(Client / Server) 架构 概念:是一种软件系统体系结构.Client是客户端,Server是服务端.客户端需要安装专用的客户端软件. 比如:微信.QQ.王者荣耀等应 ...

  9. 微信小程序基础入门

    准备 Demo 项目地址 https://github.com/zce/weapp-demo Clone or Download(需准备GIT环境) $ cd path/to/project/root ...

随机推荐

  1. 【网络协议】OSI七层模型 和TCP/IP五层模型

    OSI(Open System Interconnection)七层模型 TCP/IP 五层模型

  2. system , DOS 命令

    其实C语言也可以控制电脑关机什么的啊,以前竟然无知的连这个都不知道.悲哀啊.让各路大牛尽情嘲笑啊.. #include<stdio.h> #include<stdlib.h> ...

  3. hdu4849 最短路

    题意:       让你求0到所有点最短路中对m取余最小的那个数. 思路:       简单题,直接根据题目给的公式把z求出来,然后建边,然后最短路,然后枚举每一个点对m取余记录最小,然后输出答案,然 ...

  4. POJ 3228 二分最大流

    题意:       给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路:      比较简单的一个题, ...

  5. POJ1149 PIGS(最大流)

    题意:       有一个人,他有m个猪圈,每个猪圈里面有一定数量的猪,但是每个猪圈的门都是锁着的,他自己没有钥匙,只有顾客有钥匙,一天依次来了n个顾客,(记住是依次来的)他们每个人都有一些钥匙,和他 ...

  6. DVWA之Reflected XSS(反射型XSS)

    目录 Low Medium High Impossible Low 源代码: <?php header ("X-XSS-Protection: 0"); // Is ther ...

  7. poj2987最大权闭包(输出最少建塔个数)

    题意:      公司要裁员,每个员工被裁掉之后都会有一定的收益(正或者负),有一些员工之间有限制关系,就是裁掉谁之前必须要先裁掉另一个人,问公司的最大收益和最大收益前提下的最小裁员人数? 思路:   ...

  8. POJ3322滚箱子游戏(不错)

    题意:       讲的是一个游戏,就是在一个平面上滚动一个1*1*2的长方体的游戏,在本题里面的游戏规则是这样的: (1)      一开始给你箱子的状态,可能是横着也可能是竖着. (2)     ...

  9. JavaSE全部学习笔记——集合

  10. XAML一些控件的使用

    这节来讲一些XAML中常用控件的使用. Window Window控件是一个基础,它是其它控件的容器,我们可以通过修改其中的一些属性来设置窗体的显示效果,下面说一些最常用的属性: WindowStar ...