嵌入式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. Windows Server系统加固

    目录 账户管理.认证授权 管理账户 管理口令 授权 审核策略 IP协议安全配置 设备其他配置操作 账户管理.认证授权 管理账户 说明: 对于管理员账号,要求更改缺省账户名称,并且禁用 guest (来 ...

  2. UVA11389巴士司机问题

    题意:       有n个巴士司机,然后有2n个活,其中有n个是上午,n个是下午,每个自己都要选择一个上午的和一个下午的,每个活都有驾驶距离,如果一个司机每天的驾驶距离大于d,那么超出的部分就要每个单 ...

  3. <JVM下篇:性能监控与调优篇>04-JVM运行时参数

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. upload

    File saveDir=new File("D:/Test/UPLOAD"); if(!saveDir.isDirectory()){ saveDir.mkdirs(); } F ...

  5. 使用DevExpress的GridControl实现多层级或无穷级的嵌套列表展示

    在我早期的随笔<在GridControl表格控件中实现多层级主从表数据的展示>中介绍过GridControl实现二级.三级的层级列表展示,主要的逻辑就是构建GridLevelNode并添加 ...

  6. C++ string的size()和length()函数没有区别

    C++标准库中的string中两者的源代码如下:      size_type   __CLR_OR_THIS_CALL   length()   const     { //   return   ...

  7. [bug] IDEA 右侧模块灰色

    参考 https://blog.csdn.net/weixin_44188501/article/details/104717177

  8. 用JIRA管理你的项目——(二)JIRA语言包支持及插件支持

    昨天兴奋地把JIRA环境搭好,瞅了一眼管理界面--全英文,真是汗! 尚且不说全中文版管理界面让人操作起来多少会有困难,更别说是全英文! 昨天赞叹JIRA语言包支持丰富,今天终于找到了号称100%的语言 ...

  9. Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程

    Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式 2016/12/220 Comments  ######### ps -eo pid,ppid,%mem,%cpu,cmd ...

  10. Linux用户登录查看命令总结 - w,who,last,lastlog

    Linux用户登录查看命令总结 - w,who,last,lastlog linux shell 747 次阅读  ·  读完需要 15 分钟 0 1. 查看登录用户信息 who -H 命令输出 NA ...