如何在keil下实现单工程多目标的设置(选择性自动编译)

最近在研究Cortex-M系列CPU,整了一个工程来进行不同MCU之间的移植测试,其中涉及到Cortex-M0、Cortex-M3、Cortex-M4等多款MCU。于是产生了一个想法,如何在Keil里面建立一个【单工程多目标】的工程?换句话说就是,只有一个工程项目文件,将所有涉及到的代码文件全部关联进去,但是在编译的时候可以自由的选择不同的目标平台,进而由编译器自动纳入所需要的源文件进行编译,去除多余的文件,从而生成所对应的目标文件。这样的事情,在linux下也就是一个脚本而已,但是在Keil下,我还没有试过,不知道行不行。

不过,说干就干。咱就来试试吧。下面就以一个很简单的示例来介绍一下如何实现在同一个工程里实现不同目标文件的自动编译。

一、规划工程目录

首先介绍一下我的示例工程的目录架构。

这里写图片描述

project目录下存放工程文件,sources目录下存放源代码。为了简单起见,这里的源代码只包含2个,一个是所有工程共用的main模块,一个是每个工程下不一样的drv模块。main模块直接存放在sources目录下,而drv模块则分别存放于以不同型号mcu命名的子目录下,如下图:

这里写图片描述

这里写图片描述

二、建立项目工程

打开keil,建立工程文件。我这里的keil是5.0版本的,大家如果使用太旧的版本,可能会遇到其他问题,建议更新到这个版本。

这里写图片描述

输入工程名,我输入的是multi_project,确认就可以建立出新的工程了。然后选择“manage project items”,完成工程名、源码目录以及代码文件的添加。如下图:

这里写图片描述

注意:这里的cortex_m0、cortex_m3、cortex_m4指的就是上面所说的工程名字,接下去针对这里的每一个工程单独进行设置。选择cortex_m0工程,点击下方的“set as current target”按钮,然后点击OK关闭对话框!

这里写图片描述

这样就将当前的工程设置为了cortex_m0,而不是cortex_m3或者cortex_m4。这一点,可以从下图中看出。

这里写图片描述

三、设置工程属性

1、设置编译参数

再次右击工程,不过这次不选item,而是选择“options”,如下图:

这里写图片描述

打开属性对话框,完成工程相关属性的设置,这里仅做贴图演示,具体内容就不一一解释了。

这里写图片描述

这里写图片描述

这里写图片描述

完成所有设置之后,点击确认,关闭对话框。

2、指定包含关系

接下去还要完成cortex_m0工程下的依赖目录以及需要编译的文件的指定。因为main模块是所有工程都需要包含的,所以无需额外设置。但是drv模块是根据不同MCU来选择的,因此,在cortex_m0工程里,我们只需要包含cortex_m0模块对应的drv模块就好,其他两款MCU的驱动模块不需要包含。于是要在cortex_m0对应的drv模块目录上右击,选择属性:

这里写图片描述

将其设置为本工程可用的状态。

这里写图片描述

然后再分别选择drv_m3和drv_m4两个目录,同理将其设置为不可用的状态。

这里写图片描述

这里写图片描述

设置完成之后,再回到目录视图,可以看到被选择为不可用的两个drv目录上,出现了一个红色的禁用标志:

这里写图片描述

3、完成其他工程的设置

至此完成了cortex_m0工程的选项设置。于是,接下去还要依葫芦画瓢的完成cortex_m3工程、以及cortex_m4工程的选项设置。具体办法是,再次右击工程,选择“manage project items”,在弹出的窗口中,选择cortex_m3作为当前活动工程。如下图所示:

这里写图片描述
然后再重复上述步骤,完成cortex_m3工程的选项设置。之后再重复一次本轮操作,完成cortex_m4工程的选项设置。

这里写图片描述

最终实现的效果,可在目录结构视图中再次得到确认:

这里写图片描述

这里写图片描述

可以看到,在m3的工程中,m0和m4的驱动模块组已被禁用,而在m4的工程中,m0和m3的驱动模块组已被禁用。这就实现了不同工程下的关联文件的适配。

至此,完成了上述3个工程的全部设置过程。将你所需要的工程设置为当前的活动工程,然后点击编译,系统就会自动识别出所关联的文件并编译出对应的目标文件。如下图所示:

这里写图片描述

四、附录

为了便于交流,将本文中所演示的示例工程,打包上传在本人的CSDN中,有需要者可以自行下载。网址是(http://download.csdn.net/download/leon1741/10139351)。

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简易电子钟的设计与仿真 1. 设计要求和电路原理 1。1 设计要求 1) 可以准确地显示北京时间。 2) 时间显示选择24小时模式。 3) 选用AT89C52片机,将编写的程序下载到该片机中,并能使数码管显示。 4) 采用Keil C51编译,Proteus软件进行仿真。 1.2 设计原理与思路 利用片机的定时与中断系统功能实现电子钟的计数和调时.采用AT89C52定时中断方 式实现24小时制时钟精确的计时.通过外部的12M(11。0529M)Hz晶振产生稳定的谐振, 在AT89C52的内部定时器电路实现定时,当定时器溢出时产生中断,累计定时器的定时时 间达一秒时,数码管的秒显示加1,判断数码管的秒显示达60时,秒显示自动清零,分显示 加1,判断分显示达60时,分显示自动清零,时显示加1,判断时显示达24时,时显示自动 清零。从而实现 00:00:00—23:59:59 之间的任意时刻显示。 为了使时钟能够灵活的对时间进行调整、校对,通过增加外部的按键实现的复位、时 调整、分调整的功能.形成一个具有复位和校时功能的简易电子时钟。 二、 电子时钟设计方案 2.1电子钟设计的基本方法 2.1。1电子钟实现计时的方法 利用MCS-51系列片机的可编程定时/计数器、中断系统来实现时钟计时. (1) 计数初值计算: 把定时器T0设为工作方式2,产生0.25ms定时中断,计数溢出4000次即得时钟计时最 小位秒,而4000次计数可用软件方法实现。 假设使用T/C0,方式2,0。25ms定时,fosc=12MHz. 则初值a满足(256—a)×1/12MHz×12μs =250μs a=6 (6H) TH0=#6H; TL0=#6H (2) 采用中断方式进行溢出次数累计,计满4000次为秒计时(1秒); (3) 从秒到分和从分到时的计时是通过累加和数值比较实现。 2。1。2 电子钟的时间显示 电子钟的时钟时间在8位数码管上进行显示,时、分、秒的显示值可以在片机的内部 RAM设置三个缓冲元,30H、31H、32H分别存储时、分、秒的值.显示如下表: 表2.1 电子钟的时、分、秒显示 "时十位 "时个位 " "分十位 "分个位 " 2.1.3 电子钟的时间调整 电子钟设置3个按键通过程序控制来完成电子钟的时间调整. A键复位;按下A键,时钟显示初始值 12 00 00 B键调整分;快速按下A键,分显示加1,当分显示为59,加1变成00 C键调整时;快速按下B键,时显示加1,当时显示为23,加1变成00 2.2 芯片以及元件 2.2。1 AT89C52简介 AT89C52是51系列片机的一个型号,它是ATMEL公司生产的,是一个低电压,高性 能CMOS 8位片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),有40个引脚,32个外部双向输入/输出(I/O)端口 ,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口 线。 主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端.P0~P3 为可编程通用I/O 脚,其功能用途由软件定义.下面对相关的引脚作介绍: VCC:+5V电源。 VSS:接地。 P0口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口.作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写"1"时,可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1 口:P1口是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路。对端口写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作 输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 P2 口:P2口是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路.对端口P2 写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时, 因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL). Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3
摘要 电子万年历是一种非常广泛的日常计时工具,它不仅能够对时间技术,还能够对日期 、温度、湿度等进行显示,所以在现代社会受到广泛应用。。 本设计是一个基于片机的多功能日历显示系统,本设计能显示公历年、月、日, 以及时、分、秒、温度、星期等信息,而且还具有日期调整、时间校准以及温度采集等 功能。系统所用的时钟日历芯片DS1302和数字式温度传感器DS18B20具有高性能、低功耗 、接口简的特点,使本系统电路简化,编程方便,同时功能也很强。采用片机 的万年历系统可以很好的改善传统采用模拟电路引起的计时不准确,不可靠,一致性差 等问题。 本文设计是用片机为主控制,通过电路仿真而实现的。在Proteus7软件绘制硬件 电路原理图,用Keil软件进行编程与调试,最终生成hex文件,载入片机,从而实现仿 真效果。 本文设计经过最终调试,能够正确显示年、月、日、周、时、分、秒以及温度等所 需信息,并能正常使用对日期与时间的调整与校正功能。系统使用12864LCD液晶屏显示 信息,界面简洁、直观、易于操作。 关键词:万年历、片机、、DS1302、DS18B20 1 引言 人类的日常生活离不开时间,任何具有周期变化的自然现象都可用来测量时间。而现在 人们日常生活中广泛使用的是机械表、电子表、电子中等。 随着科技的发展,电子技术和计算机应用领域不断扩大,特别是片机的出现,是近 代计算机技术发展史上的一个重要里程碑。基于片机的万年历结合了时钟和日立的功 能,将其二者融为一体,在现实时间的同时还能显示日期和年月,它主要通过片机来 读取时钟芯片的时间、日期,然后送给显示设备显示出来。 本系统的万年历除了显示年月日外还能准确显示温度它所处环境的温度。本设计采用 的测温元件是美国DALLAS半导体公司生产的一种智能温度传感器DS18B21,测温范围为- 55~125C,最高分辨率达到0.0625C。 1.1研究的目的和意义 随着电子技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了根本性的 变化,尤其是片机技术的应用产品已经走进了千家万户。近年来,我国科技不断发展 ,我国经济发展的支柱产业——电子产业获得长足发展,各种电子产品琳琅满目,随处可 见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。 万年历便是这一发展趋势中的代表,万年历则顺应了人们对时间方面的要求。它的出现 给人们的生活带来的诸多方便,在时间极显宝贵的现代生活中,起作用更是不言而喻的 。他在学校、车站、码头、剧院、医院、办公室等公共场所的应用非常广泛。但传统的 万年历除了显示时间之外,功能较为一,逐渐失去了市场。顺应技术发展和人们生产 生活需求,各种功能的新式万年历不断涌现,且功能不断更新。 万年历作为电子类的小产品以其方便、实用等优势成为市场上的宠儿,同时也成为片 机设计培训中一个很实用的课题。因为这个课题有很好的开发性和可发挥性,因此对设 计者的要求比较高,不仅考察了队片机的掌握能力更加强调了对片机扩展的应用。 而且要求设计的万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以 万年历不论从实用角度还是培养能力角度都很有价值。 1.2 本系统主要研究内容 本系统的主要研究内容是: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、片存储、低功耗 、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和片机的接口电路。 (3)在硬件设计时,结构要尽量简实用,易于实现,是系统电路尽量简。 (4)根据硬件电路,编写控制AT89C51芯片的片机程序。 (5)通过编程、编译、调试,把程序下载到片机上运行,并实现本设计的功能。 2 系统总体设计 2.1 系统基本方案与论证 2.11 控制部分的选择方案与论证 方案一:用可编程逻辑器件设计 可采用PLD器件,设计起来结构清晰,各个模块从硬件上设计起来相对简,控制与 显示的模块间连接也会比较方便。但是考虑到本设计的特点,EDA在能够扩展上比较受局 限,占用的资源也多。从成本上讲,可编程逻辑器件价格比较高。 方案二:用片机设计 用片机芯片作为控制部分,片机有丰富的中断源,它的准确度相当高,并 且C语言的灵活运用,给编程带来了方便。片机I/O功能也比较强大,容易对其进行扩 展,使设计更加完善,此外片机的成本也比较低。 综上所述,资源丰富,程序编写也灵活简,可移植性强,性价比也高,所以 选择作为主控芯片。 2.12 显示部分的选择方案与论证 方案一:采用点阵式数码管显示 点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,但是基于电 子万年历主要是显示数字,就显得太浪费了,且价格相对较高。 方案二:采用LCD液晶显示屏 LCD液晶显示屏的显
片机开发程序 安装 Keil C51 集成开发软件,必须满足小的硬件和软件要求,才能确保编译器以及 其他程序功能正常,必须具有: (1) Pentium、Pentium-II 或兼容处理器的 PC; (2) Windows95、Windows98、Windows NT4.0; 广州周立功片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 - 12 - (3) 至少 16MB RAM; (4) 至少 20MB 硬盘空间。 µVision2 支持所有的 Keil 80C51 的工具软件,包括 C51 编译器、宏汇编器、链接器 器/定位器和目标文件至 Hex 格式转换器,µVision2 可以自动完成编译、汇编、链接程序 等操作。 (1) C51 编译器和 A51 汇编器 由µVision2 IDE 创建的源文件,可以被 C51 编译器或 A51 汇编器处理,生成可重定 位的 object 文件。Keil C51 编译器遵照 ANSI C 语言标准,支持 C 语言的所有标准特性。 另外,还增加了几个可以直接支持 80C51 结构的特性。Keil A51 宏汇编器支持 80C51 及 其派生系列的所有指令集。 (2) LIB51 库管理器 LIB51 库管理器可以从由汇编器和编译器创建的目标文件建立目标库。这些库是按规 定格式排列的目标模块,可在以后被链接器所使用。当链接器处理一个库时,仅仅使用了库 中程序使用了的目标模块而不是全部加以引用。 (3) BL51 链接器/定位器 BL51 链接器使用从库中提取出来的目标模块和由编译器、汇编器生成的目标模块, 创建一个绝对地址目标模块。绝对地址目标文件或模块包括不可重定位的代码和数据。所有 的代码和数据都被固定在具体的存储器元中。 (4) µVision2 软件调试器 µVision2 软件调试器能十分理想地进行快速、可靠的程序调试。调试器包括一个高速 模拟器,您可以使用它模拟整个 80C51 系统,包括片上外围器件和外部硬件。当您从器件 数据库选择器件时,这个器件的属性会被自动配置。 (5) µVision2 硬件调试器 µVision2 调试器向您提供了几种在实际目标硬件上测试程序的方法。安装 MON51 目 标监控器到您的目标系统,并通过 Monitor-51 接口下载您的程序;使用高级 GDI 接口, 将µVision2 调试器同类似于 DP-51PROC 片机综合仿真实验仪或者 TKS 系列仿真器的 硬件系统相连接,通过µVision2 的人机交互环境指挥连接的硬件完成仿真操作。 广州周立功片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 - 15 - (6) RTX51 实时操作系统 RTX51 实时操作系统是针对 80C51 微控制器系列的一个多任务内核。RTX51 实时内 核简化了需要对实时事件进行反应的复杂应用的系统设计、编程和调试。这个内核完全集成 在 C51 编译器中,使用非常简。任务描述表和操作系统的一致性由 BL51 链接器/定位器 自动进行控制。 此外µVision2 还具有极其强大的软件环境、友好的操作界面和简快捷的操作方法, 其主要表现在以下几点。 丰富的菜栏; 可以快速选择命令按钮的工具栏; 一些源代码文件窗口; 对话框窗口; 直观明了的信息显示窗口。
您好!对于Keil的版本问题,通常出现无法编译老版本生成的工程的情况,可能是由于不同版本之间的兼容性问题导致的。为了解决这个问题,您可以尝试以下几个步骤: 1. 更新Keil版本:首先,尝试使用最新版本的Keil进行编译。新版本通常会修复旧版本存在的问题,并提供更好的兼容性。 2. 重新导入工程:如果更新Keil版本后仍然无法编译,请尝试重新导入工程。在Keil中,选择“Project”菜,然后选择“Open Project”。在弹出的对话框中,选择您要导入的工程文件,然后点击“Open”按钮。 3. 重新配置工程设置:如果重新导入工程后仍然无法编译,请检查工程设置是否正确。在Keil中,选择“Project”菜,然后选择“Options for Target”。在弹出的对话框中,确保工程设置正确,并且与您的目标硬件和编译器版本兼容。 4. 检查编译器选项:如果以上步骤都没有解决问题,请检查编译器选项是否正确设置。在Keil中,选择“Project”菜,然后选择“Options for Target”。在弹出的对话框中,选择“C/C++”选项卡,并确保编译器选项正确设置,并与您的目标硬件和编译器版本兼容。 如果您仍然遇到问题,建议您参考Keil的官方文档或向Keil的技术支持团队寻求帮助,他们将能够更好地帮助您解决版本兼容性问题。希望这些步骤能对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值