嵌入式C程序基础与编程结构
嵌入式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程序基础与编程结构的更多相关文章
- 嵌入式-C语言基础:通过结构体指针访问结构体数组
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- 廖雪峰Java1-2程序基础-1基本结构
1.类名 类名首字母大写 类名必须是英文字母.数字和下划线的组合 类名必须是以英文字母开头 好的命名:Hello NoteBook VRPlayer 不好的命名:hello 跟无意义的数字Good12 ...
- .NET零基础入门之01:开篇及CSharp程序、解决方案的结构
一:为什么选择C# 每个人都有梦想,有些人的梦想就是:成为程序员.最课程(www.zuikc.com)的<零基础c#入门>是试图帮助我们实现这个梦想. 也许你要问:我基础很差怎么办?最课程 ...
- 编写优质嵌入式C程序
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...
- 编写优质嵌入式C程序(转)
前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
- python基础-网络编程part01
软件开发架构 C/S(Client / Server) 架构 概念:是一种软件系统体系结构.Client是客户端,Server是服务端.客户端需要安装专用的客户端软件. 比如:微信.QQ.王者荣耀等应 ...
- 微信小程序基础入门
准备 Demo 项目地址 https://github.com/zce/weapp-demo Clone or Download(需准备GIT环境) $ cd path/to/project/root ...
随机推荐
- Linux中的网络配置
目录 网卡的配置 NetworkManager的使用 Team网卡绑定 Centos6.5.Redhat7.Kali网卡配置的不同 Kali桥接模式配置静态ip 网卡的配置 网卡命名的不同: Rhel ...
- Jedis基础详解
Jedis 使用Java来操作Redis 什么是Jedis 是Redis官方推荐的Java操作Redis中间件, 如果你要使用Java操作Redis, 那么就该对jedis熟悉 测试 导入对应的依赖 ...
- SpringBoot Restful
SpringBoot Restful 大家在做Web开发的过程中,method常用的值是get和post. 可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富 ...
- hdu - 1716 排列2 (使用set对全排列结果去重)
题意很简单,只是有几个细节要注意,首先就是一次只是输入四个数字.输出结果要从小到大(进行全排列之前要进行排序).题目要求千位数相同的在一行,中间使用空格隔开(第二次在输出的时候判断上一次记录的千位数是 ...
- Hive企业级性能优化
Hive作为大数据平台举足轻重的框架,以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一. 但是如果我们只局限于会使用Hive,而不考虑性能问题,就难搭建出一个完美的数仓,所以Hi ...
- 关于有符号数和无符号数的转换 - C/C++
转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题, ...
- CRM系统如何改善企业业务流程
工作流管理是CRM客户管理系统的一个重要功能.当企业进行业务管理和处理时,会有一套自己的工作流程.使用CRM系统,可以帮助企业改进整个工作流程,利用系统的流程设置模块,将各个部门所处理的活动定义为过程 ...
- SQL中那么多函数,Java8为什么还要提供重复的Stream方法,多此一举?
有个同学提出一个这样的疑问; 在业务系统中,数据一般都从sql中查询,类似使用where,order by,limit,聚合函数等,为什么还要用java8的Stream方法? 对这个问题,大家有什么见 ...
- safari模拟IE
在如下网站找到相对应的useragent https://developers.whatismybrowser.com/useragents/explore/software_name/interne ...
- [bug] Failed building wheel for xxx
参考 https://blog.csdn.net/pengzhisen123/article/details/79049834 https://www.lfd.uci.edu/~gohlke/pyth ...