【微处理器系统原理与应用设计第八讲】程序设计的开发框架包括编程语言、程序的基本要素、汇编程序结构、集成开发环境

news2024/11/14 15:37:17

一、编程语言

从处理器的角度看:一个指令只是一个操作,那么执行多条指令构成的程序就是完成一个完整功能的操作。

从程序执行的角度看:处理器读取指令后译码执行,完成所有操作。

从程序设计的角度看:用指令来描述所要实现的功能,并组织这些指令,将指令和数据放在规定的存储位置,最终让字符变成可以执行的二进制数。

1、机器语言

二进制语言是处理器能直接执行的唯一语言,也叫机器语言。程序设计就要按照指令的执行顺序将相应的二进制数值放在相应的存储空间。这种方式简单直接,写入后就可以执行,但是不便于编程。

2、汇编语言

采用一些助记符来规范指令的排列和数据的存放。它们与汇编指令共同构成汇编程序。这些指令和规范一起就构成了汇编语言。

汇编语言编写的程序通过汇编器生成目标模块,该目标模块描述了其他在存储区段需要的空间和内容,每个存储区段存有指令、数据或者两者兼有。

将这些目标通过链接器互连,就可以创建一个可执行文件,该文件把数据和目标代码分配到合适的存储区段。链接器可以决定标号的地址并自动更新所引用标号的机器指令中的值。

在存储器中,通过内存镜像来存放可执行的内核代码和数据,它们会出现在所生成的可执行文件。

3、高级语言

为了让更多的程序设计不依赖于处理器和汇编语言,高级语言应运而生。高级语言是面向处理的,它采用规范的数据定义、操作语句和程序结构,使程序更接近处理思路,更易读易懂。高级语言编写的程序通过编译器可以生成汇编程序。

目前,微处理器系统底层驱动应用开发采用C语言。C语言本身是一种高级语言,描述简洁且易用,便于进行数据处理和业务应用开发。C语言的大部分语句与汇编语句相通,可视为汇编语句的一种变形,因此C语句操作机制清晰,处理效率较高,便于进行底层电路的驱动开发。

二、程序的基本要素

数据是信息的表现和处理额对象,它决定如何进行存储和访问。

运算是数据的加工,决定如何处理数据。

流程是算法的体现,决定如何执行运算操作。

1、数据定义

数据定义的实质是完成存储分配,即确定数据的类型和数量。通常采用变量来定义数据,高级语言的变量可以保存在寄存器中,也可以保存在存储器中,而汇编语言中的变量都保存在存储器中。

2、处理数据

处理数据的实质是实现数据的加工。高级语言的运算语句是面向变量的,一条运算语句可能对应多条汇编语句并涉及多次寄存器或者存储器的数据操作;汇编语言的运算语句是面向ALU的,一条语句就是一次操作,涉及一次寄存器和存储器的数据操作。

3、流程控制

流程控制的实质是构建某一功能的处理流操作。常规的三种处理流程采用三种常用结构:顺序结构、分支结构、循环结构。高级语言有专用的结构构建语句,涉及比较运算和跳转操作;而汇编语言中只能用多个跳转语句来实现程序流程。

4、组织结构

组织结构的实质是将多个功能处理流程有机结合,从而完成一个复杂的功能。高级语言采用专用的函数和子过程来创建,自动完成堆栈操作和参数传递等工作;而汇编语言则通过标号定义和堆栈操作来实现。

三、汇编程序结构

1、分区

在汇编语言中,采用AREA对代码和数据分别分区,并指明存储类型。最简单的存储文件必须包括两个区;保存异常向量表的只读数据区和包含启动程序的只读代码区。

每个区的首个指令或者数据通常都要有标识,如果这个标识被其他文件使用,那么还要再用EXPORT语句来声明一次该标识。

2、异常向量表

异常向量表是在只读存储区中分配的数据,其中第一个字保存主栈指针MSP的值,第2个字保存重启异常服务程序向量标识Reset_Handler的值。这里MSP的值可以是人为指定的,也可以通过语句来自动分配。

3、栈和堆

堆栈,简称栈(STACK),是用户存放程序临时创建的局部数据。由于处理器加电时会自动获取MSP的值,因此系统启动时要自动分配一定空间的主堆栈。

堆(HAEP)是运行中被动态分配的存储段,大小并不固定。可动态扩张或者缩减。若在程序处理中需要堆,则在系统启动时应该分配足够的堆空间。

4、重启异常服务

假如重启程序代码的首地址标识为Reset_Handler,如果后续代码作为一个功能整体模块,那么加上PROC来进行标识,以ENDP作为模块代码的结束。由链接器的配置可知,Reset_Hnadler是汇编程序的入口标识,所以加上ENTRY语句,并由EXPORT语句将Reset_Handler设置为链接器可用的标识。

5、数据初始化

从存储器使用的角度看,指令放在ROM区,处理过程中所要使用的数据放在RAM区,堆栈也要放在RAM区。

通常情况下,程序需要构建三类区:只读区(RO区)、可初始化的读写区(RW区)和不初始化的读写区(ZI区)。

RO区中分配异常向量表、程序代码和只读数据

RW区中分配需初始化的数据。其中RW区的数据初值既要保存在ROM中以保证数据不丢失,也要保存在RAM中供处理器使用。保存在ROM中的RW区数据的初值在加电后要用指令将它们读出并写到相应的RAM中。

ZI区中分配不需要初始化的数据

四、集成开发环境

软件开发的三种主要工具:程序构建工具链、编程器和调试器。一个基本的集成开发环境(IDE)通常都包含这些工具。

1、程序构建工具链

程序构建工具链把程序翻译成机器指令并存储在一个可执行文件中。程序构建工具链如下图,其中包含C语言的armcc编译器、armasm汇编器和armlimk链接器,最终的内存映像会在Arm ELF形式的可执行文件中给出,文件后缀为.axf。

2、编程器

当微处理器上电或者复位时,无法将程序加载到存储器,因此程序必须提前写在存储器中。程序存储器是非易失性的,在断电的情况下也能保存所存储的内容。

编程器根据可执行文件的描述把程序放入微处理器的存储器中。它有硬件与软件两部分,硬件连接到Cortex-M4处理器的串行线调试(SWD)接口来使能存储器用于编程;软件部分可以是一个独立的程序,也可以构建于IDE中。

3、调试器

调试器使开发者在处理器运行程序时能够控制程序执行和测试程序状态。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尽快更新!Zyxel 路由器曝出 OS 命令注入漏洞,影响多个版本

近日,Zyxel 发布安全更新,以解决影响其多款商用路由器的关键漏洞,该漏洞可能允许未经认证的攻击者执行操作系统命令注入。 该漏洞被追踪为 CVE-2024-7261,CVSS v3 得分为 9.8,是一个输入验证故障,由用户提…

“榆”您相约|遨游矿用煤安防爆手机助力煤矿作业安全增效

金秋九月结硕果,丹桂飘香迎盛会。2024年9月13日至15日,第十八届榆林国际煤炭暨高端能源化工产业博览会(以下简称“榆林国际煤博会”)即将在榆林会展中心盛大启幕。本次博览会以“能源新时代,低碳新榆林”为主题&#x…

SAP学习笔记 - 开发03 - CDSView开发环境搭建,Eclipse中连接SAP,CDSView创建

上一章讲了BTP的账号创建,环境搭建等内容。 SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)-CSDN博客 本章继续讲SAP开发。 - CDSView 的开发环境(Eclipse)搭建…

世界公认十大护眼灯数据出炉!一文看懂孩子用的台灯哪个牌子好

近年来,随着科技的迅猛发展,诸如智能手机、电脑等电子设备在工作、学习及娱乐中的应用日益广泛,人们对这些设备的依赖程度也随之加深。然而,长时间面对屏幕不可避免地给眼睛带来伤害,如眼疲劳、干燥甚至近视等问题。因…

线程池概念介绍

一、初始化线程的四种方式 1.继承Thread 2.实现Runnable 3.实现Callable接口FutureTask 4.线程池:两种主要初始化方式Executors.newFixedThreadPool()或new ThreadPoolExecutor() 方式1和方式2:主进程无法获取线程的运算结果。 方式3:主进程可以获取运算结果,但是…

MMO地图传送

本篇由以下四个点讲解: 创建传送点 传送点配置 编辑器扩展:传送点数据生成 传送协议与实现 创建传送点 建碰撞器触发 //位置归零 建一个传送门cube放到要传送的位置(这个teleporter1是传出的区域 这是从另一张地图传入时的传送门 创建一…

mysql笔记—基础

1.SQL语句 DDL(数据库对象操作)、DML(增删改)、DQL(查询)、DCL(用户和权限操作) 2.DDL: 1.数据库操作: show databases; create database []; use []; sele…

网络工程师学习笔记——无线通信网

移动通信 从1G到3G都是针对语音通话设计的,只有4G才可以与Internet衔接 1978年美国贝尔实验室开发了高级移动电话系统(AMPS),可以随时随地的进行通信,采用蜂窝技术解决了公用通信系统所面临的大容量要求和…

初识Linux · 进度条

目录 前言: 1 缓冲区和回车换行 2 进度条 前言: 我们目前学习了些许知识,已经足够支持我们写一个非常非常小的项目了,即进度条,相信大家都有过下载游戏,等待游戏更新完成的时候,那么此时就有…

电器维修系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,客服聊天管理,基础数据管理,公告管理,新闻信息管理 微信端账号功能包括:系统首页,新闻信息,我的 开发系…

站长工具 API 接口,助力网站管理新高度

站长工具是一款非常实用的网站管理工具,通过其提供的API接口,可以轻松实现多种功能,如域名反查、域名备案查询、IPV6归属地查询等。这些功能可以帮助网站管理员更好地管理和优化自己的网站。以下是简单的代码示例,展示了如何使用站…

康姿百德公司官网柔压磁性枕豪华款高科技邂逅温柔夜活力满满!

康姿百德豪华柔压磁性枕慢回弹拥抱每寸肌肤,科技面料让呼吸自由夜夜好眠不是梦! 现代家居设计不仅注重美观,更强调功能性和舒适性。康姿百德柔压磁性枕(豪华款)通过将高科技材料与创新设计结合,为我们的家…

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码&…

最大N个数与最小N个数的和

题目描述 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重 说明: 数组中数字范围[0,1000]最大N个数与最小N个数不能有重叠,如有重,输入非法返回-1输入非法返回-1 输入描述 第一行输入M&a…

uboot:配置编译

了解BSP 在嵌入式系统中,BSP(Board Support Package)被称为板级支持包或板级支持软件。它是一组针对特定硬件平台的软件支持包,为开发人员提供了一个统一的接口层,简化了硬件和软件之间的交互。BSP的主要功能和特点如…

Python数据分析-绘制图表

示例1: from pyecharts.charts import Bar # 柱状图 from pyecharts import options as optsfrom pyecharts.render import make_snapshotbar Bar() bar.add_xaxis([一月, 二月, 三月, 四月, 五月]) bar.add_yaxis("销售额", [10, 20, 15, 25, 30])# 配…

spring 事物使用场景说明

事务使用场景。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。 确实&am…

使用Node-API进行异步任务开发

一、Node-API异步任务机制概述 Node-API异步任务开发主要用于执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应效率。 1、应用场景: 文件操作:读取大型文件或执行复杂的文件操作时,可以使用异步工…

TCP远程命令执行

目录 一. 命令集 二. 命令执行模块实现 三. 服务端模块实现 四. 服务端调用模块实现 五. 客户端模块实现 六. 效果展示 此篇教大家如何利用TCP进行远程命令执行。 一. 命令集 将值得信任的命令放进一个txt文件中,执行命令时,就去这…

英语每日一段 195

Promising economic indicators won’t instantly reverse the lingering impact of hard times for millions of families, workplace culture expert Jessica Kriegel said. “Perception and reality are sometimes aligned and sometimes not,” Kriegel told Newsweek. “…