编译器原理简介(以Cortex-M3为例)

news2024/11/16 5:54:05

在"keil根目录\ARM\ARMCC\bin"下可以找到如下文件:

他们就是编译器内核,将工程代码转换成二进制文件,烧写进MCU中执行。

目录

C与汇编

 典型的开发流程

编译工具报错举例


C与汇编

在CM3上编程,开发人员既可以使用C也可以使用汇编。可能还有其它语言的编译器,但是大多数人还是会在C与汇编的世界里游弋。C与汇编都“尺有所短,寸有所长”,不能互相取代。使用C能开发大型程序,而汇编则用于执行特种任务。

只有在不多的特殊场合是适合使用汇编,甚至是非使用汇编语言不可的,如:

  • 无法用C写成的函数,如操作特殊功能寄存器,以及实施互斥访问;
  • 在危急关头执行处理的子程(如,NMI服务例程);
  • 存储器极度受限,只有使用汇编才可能把程序或数据挤进去;
  • 执行频率非常高的子程,如操作系统的调度程序;
  • 与处理器体系结构相关的子程,如上下文切换;
  • 对性能要求极高的应用,如防空炮的火控系统。

用C写的程序可以移植,并且操作复杂数据结构时远远比汇编方便。

在很多情况下,都需要让C程序模块与汇编程序模块互相交互,它们包括:

  • 在C代码中使用了嵌入式汇编(或者是在GNU工具下,使用了内联汇编);
  • C程序呼叫了汇编程序,这些汇编程序是在独立的汇编源文件中实现的;
  • 汇编程序调用了C程序。

 典型的开发流程

在开发基于CM3的应用程序时,编译工具需要考虑到最基本的开发语言,也就时C与汇编,使用ARM工具链时的典型开发流程如下:

对照文章最开始的编译器文件来看,armar.exe是预处理器、armcc.exe是编译器、armasm.exe是汇编器、armlink.exe是链接器、fromelf.exe是elf文件的实用工具集。

编译工具报错举例

1.汇编器报错举例

在startup_stm32f10x_hd_vl.s中,修改原来的汇编语言,制造一个汇编源文件的错误:

再对工程进行编译,出现如下报错:

以assembling…开头的错误提示即为汇编器报错。

2.编译器报错举例

在main.c中,屏蔽一个头文件,制造一个C源文件的错误:

再对工程进行编译,出现如下报错:

以compiling…开头的错误提示即为编译器报错。

3.链接器报错举例

在main.c中,调用一个不存在的函数,制造一个链接错误:

再对工程进行编译,出现如下报错:

以linking…开头的错误提示即为链接器报错。

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

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

相关文章

CANoe-新型通信模式(SOA面向服务架构)

传统的以ECU为单元的整车通信架构,是面向信号的以CAN/LIN等总线为代表的经典通信模式。而以车载以太网为总线,SOME/IP或DDS等为中间件的SOA面向服务的新型通信模式,在以域控为单元的整车通信架构中被越来越多的使用 CANoe作为仿真和测试环境提供了统一的跨网络通信概念。这…

字符设备驱动_3:register_chrdev_region() 简单字符设备驱动的实现

概述&#xff1a;利用regist_chrdev_region() 函数接口注册同一类字符设备的多个子设备。 上一节一起整理了一遍注册一个简单字符设备的流程&#xff0c;接下来就来实现一个同一类字符设备的多个子设备驱动程序。 1. Demo 程序 #include <linux/module.h> #include <…

Linux篇 三、香橙派Zero2搭建Qt环境

香橙派Zero2系列文章目录 一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 三、香橙派Zero2搭建Qt环境 文章目录香橙派Zero2系列文章目录前言一、下载交叉编译工具二、编译QT库1.先去网站下载Qt的资源包2.解压3.开始移植&#xff1a;4.编译&#xff1a;5.安…

jQuery 查找方法

文章目录jQuery 查找方法查找祖先元素parent()parents()parentsUntil()查找后代元素children()find()contents()向前查找兄弟元素prev()prevAll()prevUnitl()向后查找兄弟元素next()nextAll()nextUntil()查找所有兄弟元素siblings()jQuery 查找方法 查找祖先元素查找后代元素向…

年度创新力十强,热点领域重要力量,典型案例报告入选!美创再获ISC安全百强多项殊荣

12月21日&#xff0c;数字安全界“奥斯卡”—ISC 2022数字安全创新能力百强&#xff08;简称“创新百强”&#xff09;重磅揭晓&#xff0c;本届评选由ISC平台发起&#xff0c;联合赛迪顾问、数世咨询、数说安全、看雪、安在等网络安全行业权威机构、媒体共同开启评选&#xff…

web开发前基础知识补充

什么是URL&#xff1f; URL是统一资源定位符&#xff0c;对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址&#xff1b; 互联网上的每个文件都有一个唯一的URL&#xff1b; 基本URL包含模式&#xff08;或称协议&#xff0…

Kafka使用MirrorMaker同步数据的两种方式

1.前言 MirrorMaker 是 Kafka官方提供的跨数据中心的流数据同步方案。原理是通过从 原始kafka集群消费消息&#xff0c;然后把消息发送到 目标kafka集群。操作简单&#xff0c;只要通过简单的 consumer配置和 producer配置&#xff0c;然后启动 Mirror&#xff0c;就可以实现准…

不喜欢现在的工作,如何成功转行?

对现有行业职业公司不满、不喜欢&#xff0c;感觉此路不通&#xff0c;想换个跑道再战&#xff01; 我想说&#xff0c;请先冷静一下。 我有两个认识的人&#xff0c;一个成功转行&#xff0c;另一个失败。后面会有我的分析~~ 我的一位女性朋友A&#xff0c;小公司里工作近1…

00后的他为何能年薪30w,转行真的很难吗?

网上有很多人经常在讨论转行&#xff0c;有的人说转行很难&#xff0c;有的却说不难&#xff0c;到底是怎样呢&#xff1f;我来说一个我身边发生的这么一个事实吧&#xff01; 我之前接触过一个00后&#xff0c;他不同于别人&#xff0c;网上大多说00后是看老板不爽就直接不干…

unidbg入门级案例-某航空app_hnairSign分析

今天要分析的是某航空app&#xff0c;版本号是8.19.0&#xff0c;分析的样本在文章底部会提供&#xff0c;这次我们要借用unidbg 来辅助进行算法还原。 有关unidbg的介绍笔者就不做过多的描述&#xff0c;大家可自行百度查询。 该样本的so比较简单&#xff0c;但重点是记录分析…

多标签分类怎么做?(Python)

一、基本介绍 首先简单介绍下&#xff0c;多标签分类与多分类、多任务学习的关系&#xff1a; 多分类学习&#xff08;Multi-class&#xff09;&#xff1a;分类器去划分的类别是多个的&#xff0c;但对于每一个样本只能有一个类别&#xff0c;类别间是互斥的。例如&#xff1…

electron:获取MAC地址

一、背景 当我们需要用户“使用指定设备”访问程序的时候&#xff0c;我们需要获取用户设备的固定的id&#xff0c;设备id用户id实现业务需求&#xff0c;这个所谓的id就是MAC地址。 对于其他方法&#xff1a; uuid&#xff1a;uuid是一个唯一的字符串&#xff0c;可以存放到…

深度融合钉钉PaaS,授客学堂助力企业实现培训数字化

方案简介 授客学堂将企业培训领域的经验与钉钉开放能力深度融合&#xff0c;通过集成钉钉人事一体、酷应用、IM底座、待办等多种开放能力&#xff0c;实现学员培训数据实时互通&#xff0c;为客户提供更新更酷的能力&#xff0c;高效解决企业培训的数字化服务。 方案场景 在…

tensorflow feature_columns

总结来说&#xff1a; feature_column定义了一种数据预处理的方式&#xff0c;可以看作是一种格式&#xff0c;指定了key&#xff0c;用于后续读取输入流中对应列的数据feature_column不是tensor&#xff0c;所以如果在下一步应用到模型中是需要tensor&#xff0c;还需要通过f…

非互联网人士如何转行互联网?

结论是&#xff0c;具备互联网式的做事思维积累互联网项目经验。我靠着这个方法从一名传统销售顺利转行&#xff0c;&#xff08;之前没有任何互联网工作经验&#xff09;入职了一家互联网公司做用户运营&#xff0c;半年前跳槽成为一个4人运营小团队的leader。 在分享我自身的…

我国丁辛醇行业现状:上游丙烯供给充足 下游需求下滑 市场出现高差价现象

根据观研报告网发布的《中国丁辛醇行业发展深度分析与投资前景研究报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;丁辛醇是一种丁醇和辛醇合成的有机物&#xff0c;无色透明、易燃的油状液体&#xff0c;具有特殊的气味&#xff0c;能与水及多种化合物形成共沸物&…

服务器IPMI(BMC)装机

将网线连接服务器的控制口与PC&#xff0c;服务器的控制口默认IP为192.168.100.100&#xff0c;网关默认为192.168.100.1&#xff0c;将PC的IP修改为与服务器控制口相同网段。打开浏览器&#xff0c;输入https://19168.100.100&#xff0c;进入IPMI登录界面。账号密码需要找运维…

Apache Airflow Hive Provider <5.0.0 存在操作系统命令注入漏洞

漏洞描述 Apache Airflow 是一个用于以编程方式创作、安排和监控工作流平台。Apache Airflow Hive Provider 是一个使用 SQL 读取、写入和管理分布式存储中的大型数据集的工具包。 Apache Airflow Hive Provider 在 5.0.0 之前的版本中由于对airflow/providers/apache/hive/h…

Stm32标准库函数6——f103 PWM 电调(50Hz)

#include "stm32f10x.h" #include "delay.h" TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; u16 Ppm; /************************************************* 函数: void RCC_Configuration(void) 功能: 配…

D. Friends and Subsequences Codeforces Round #361 (Div. 2)RMQ+二分 单调队列

题目传送门 题意为 给定两个长度为n的数组&#xff0c;设为a数组和b数组&#xff0c;需要找到所有可能的区间中&#xff0c;a数组的最大值等于b数组的最小值的个数。 1&#xff1a;RMQ 二分 RMQ 能找到一个数组在任意区间的最大值或者最小值&#xff0c;只需要在O(n)的时间…