关于PIC的C18编译器的链接脚本文件

发布者:科技驿站最新更新时间:2012-10-30 来源: 21ic 关键字:PIC单片机  C18编译器  链接脚本 手机看文章 扫描二维码
随时随地手机看文章

在PIC单片机编程中,链接描述文件(*.lkr)是链接器的命令文件。它们指定以下内容:

* 目标部件的程序和数据存储器区域

* 堆栈大小和位置 (对于 MPLAB C18)

* 源代码中的逻辑代码段与程序和数据区域的映射

MPLAB C18 C 编译器为每种单片机提供了多达四种类型的链接器描述文件(*.lkr)。这些链接器描述文件与MPLAB IDE所提供链接器描述文件的

不同之处在于,它们在编译器启动代码和库中自动链接,并留出堆栈区。为PIC18F4620单片机提供的四个链接器描述文件如下所示:

18f4620.lkr 供在非扩展模式下编译的应用程序使用。

18f4620i.lkr 供在非扩展模式下编译并使用 MPLAB ICD 2 调试的应用程序使用。“i”表示此链接器描述文件为MPLAB ICD 2使用的资源分配存储空间。

18f4620_e.lkr 供在扩展模式编译的应用程序使用。

18f4620i_e.lkr 供在扩展模式下编译并使用 MPLAB ICD 2 调试的应用程序使用。“i”表示此链接器描述文件为MPLAB ICD 2使用的资源分配存储空间。

对于 18f4620i_e.lkr 必须添加到 MPLAB IDE项目的项目文件中。

所需要的启动模块、标准函数库和处理器函数库在链接器描述文件中指定,所以在mplab的项目树的“Object Files”或“Library Files”中都不需要添加任何文件。当然,如果项目中要链接其它目标文件或库文件,那么应将它们添加到这些分支下。

下面我们结合18f4620.lkr来说明链接描述文件中代码的含义

// $Id: 18f4620.lkr,v 1.3 2004/04/26 18:09:00 curtiss Exp $

// File: 18f4620.lkr

// Sample linker script for the PIC18F4620 processor

//将当前目录library/object搜索路径,.代表当前目录

LIBPATH .

//FILES伪指令指定链接的目标或库文件

//注:可以在一个单独的 FILES 伪指令中指定多个目标或库文件。

FILES c018i.o

FILES clib.lib

FILES p18f4620.lib

//链接描述文件说明PICmicro MCU的存储器架构。这使链接器可把代码在可用的ROM 空间,把变量放在可用的 RAM 空间。标记PROTECTED的区域不会被用于一般程序或数据的分配。只有在为代码段指定了一个绝对地址时,或在链接描述文件中使用SECTION 伪指令将该代码段分配给该区域时,代码或数据才被分配到这些区域。

//CODEPAGE 伪指令用于程序代码、初始化的数据值、常数值和外部存储器。

CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED //复位向量和中断向量

CODEPAGE NAME=page START=0x2A END=0xFFFF //用户存储空间

CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED //ID 地址单元

CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED //配置存储空间

CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED //器件 ID

CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED //EEPROM 数据

//DATABANK(分组寄存器)和ACCESSBANK(快速操作寄存器)伪指令用于内部RAM中的变量

ACCESSBANK NAME=accessram START=0x0 END=0x7F //Bank 0

DATABANK NAME=gpr0 START=0x80 END=0xFF //Bank 0

DATABANK NAME=gpr1 START=0x100 END=0x1FF //Bank 1

DATABANK NAME=gpr2 START=0x200 END=0x2FF //Bank 2

DATABANK NAME=gpr3 START=0x300 END=0x3FF //Bank 3

DATABANK NAME=gpr4 START=0x400 END=0x4FF //Bank 4

DATABANK NAME=gpr5 START=0x500 END=0x5FF //Bank 5

DATABANK NAME=gpr6 START=0x600 END=0x6FF //Bank 6

DATABANK NAME=gpr7 START=0x700 END=0x7FF //Bank 7

DATABANK NAME=gpr8 START=0x800 END=0x8FF //Bank 8

DATABANK NAME=gpr9 START=0x900 END=0x9FF //Bank 9

DATABANK NAME=gpr10 START=0xA00 END=0xAFF //Bank 10

DATABANK NAME=gpr11 START=0xB00 END=0xBFF //Bank 11

DATABANK NAME=gpr12 START=0xC00 END=0xCFF //Bank 12

DATABANK NAME=gpr13 START=0xD00 END=0xDFF //Bank 13

DATABANK NAME=gpr14 START=0xE00 END=0xEFF //Bank 14

DATABANK NAME=gpr15 START=0xF00 END=0xF7F //Bank 15

ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED //Bank 15 Special Function Registers(SFR)

//逻辑代码段用于指定应将定义的存储器区域的哪一个区域用于一段源代码。要使用逻辑代码段,用 SECTION 伪指令在链接描述文件中定义代

//码段,然后使用该语言内置机制在源文件中引用该名称 (如 MPLAB C18 的 #pragma section)。此代码段伪指令通过指定代码段的名

称,//以及包含此代码段的 ROM 中的程序存储器区块或 RAM 中的数据存储器区块来定义代码段:

//SECTION NAME=secName { ROM=memName | RAM=memName }

SECTION NAME=CONFIG ROM=config

//只有 MPLAB C18 要求设置软件堆栈。下面的语句指定堆栈大小以及堆栈将被分配到的可选 DATABANK:

//STACK SIZE=allocSize [RAM=memName]

STACK SIZE=0x100 RAM=gpr14

关键字:PIC单片机  C18编译器  链接脚本 引用地址:关于PIC的C18编译器的链接脚本文件

上一篇:PIC单片机软件编程技巧
下一篇:汇编手记之PIC单片机

推荐阅读最新更新时间:2024-03-16 13:11

PIC单片机红外遥控编码与解码的问题分享
一般常用的红外遥控器编码规则都差不多,基本上都同6221原理一样 PIC单片机接收时: 如果用54,57这类片子做的话有一定的难度(假如要做成实时控制的;比如说你还要驱动显示,驱动步进电机,在加上几个按键)原因就是这类片子没有中断 例程如下(用来解6221;分频比为256) RF: BTFSC PORTB,2;;B2口用做接收口 GOTO RF1 BTFSS DOWNBIT;;检测下降沿标制 CLRF RTCCOUNT BSF DOWNBIT;制下降沿标制 BTFSS UPBIT;;检测上升沿标制 RETLW 0 BTFSC IDBIT;;检测码头标制 GOTO RF3 MOVLW 2AH SUBWF
[工业控制]
PIC单片机的四种振荡方式及设置
    P IC 单片机有四种振荡方式可供选择,振荡方式经配置寄存器CONFIG的F0SC1,F0SC0位加以选择,并在EPROM编程时写入。     晶体振荡器/陶瓷振荡器:     XT、LP、HS三种方式中,需一晶体或陶瓷谐振器连接到单片机的OSC1/CLKIN和OSC2/CLKOUT引脚上,以建立振荡,如图1所示。电阻RS常用来防止晶振被过分驱动。在晶体振荡下,电阻RF≈10MΩ。对于32KHz以上的晶体振荡器,当VDD 4.5V时,建议C1=C2≈30PF。(C1:相位调节电容;C2:增益调节电容。)   表1:振荡器类型选择 F0SC1 F0SC0 振荡方式 0 0 低功耗振荡LP(Low Pow
[单片机]
PIC单片机入门指南
第一步首先得下载个开发环境,PIC的开发环境有,MPLAB IDE和MPLAB X IDE其中X的需要安装JAVA的东西, 所以这里先推荐安装旧版的,以下是连接, http://www.microchip.com/stellen ... 9&part=SW007002 打开后在下面找到最大的那个压缩包下载。 下载完毕后解压出来,运行setup.exe安装, 猛点下一步,如果需要更改路径就要更改下,直到安装完毕。 下载XC8编译器 http://www.microchip.com/pagehandler/zh-cn/devtools/mplabxc/ 连接在左边的 XC8 Windows -- 点这个下载完后运行x
[单片机]
<font color='red'>PIC单片机</font>入门指南
PIC单片机之中断程序
什么是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。 中断事件 什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如
[单片机]
PIC单片机驱动LCD模块的设计
偏置电压是通过使用外部梯形电阻网络(电路见下图)而产生。因为梯形电阻网络连接在VDD和Vss之间,所以会有电流通过梯形电阻网络,电流大小与电阻成反比。也就是说,电阻越大,通过梯形电阻网络的电流就越小。如果使用10kΩ电阻,且VDD=5V,则梯形电阻网络将不断消耗166μA的电流。这对于一些使用电池供电的应用来说是很大的电流。 如何最大程度增大电阻,而又不会对显示质量产生负面影响?一些基本的电路分析可以帮助确定梯形网络中电阻增大的程度。 LCD模块实际上就是一个模拟多路开关,它交替地将LCD电压连接到各个段和公共引脚(段电极和公共电极交叉于每一个LCD像素点)。LCD像素可用电容进行模拟。梯形电阻网络中的每个分接点可以用戴维
[单片机]
<font color='red'>PIC单片机</font>驱动LCD模块的设计
24C02在PIC单片机系统中的应用
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控制领域,24C02可以解决PIC16C8 系列单片机片内EEPROM不足的问题,用以保存诸如用户设置参数、采集到的数据等。 由于部分PIC单片机不具备I2C总线接口,在应用时必须用软件法加以解决。 在软件编制时应当严格遵循I2C总线规则,并注意24C02的片内读写周期时间,调整好程序流程,以避免写不进、读不出的问题。 下面将笔者在实际工作中遇到的问题和解决的方法进行简单的介绍,希望可以给同行一些帮助。 首先约定,数据由微处理器发送到24C02称 写 、 发 ,反之称 读 、
[单片机]
PIC单片机在ICD1上做LED灯的循环闪烁程序
;************************************************* ;* FLASH.ASM * ;************************************************* ;************************************************* ;* 本程序是一个LED灯的循环闪烁程序,用INT键来切换* ;* 闪烁模式 * ;************************************************* include p16f877.inc ;*---- MODESEL equ 20h MODESELB equ 21h
[单片机]
PIC单片机实现LCD1602显示字母A
PIC单片机LCD1602显示单个A字程序 STATUS EQU 3H ;定义状态寄存器地址 PORTA EQU 5H ;定义RA口数据寄存器地址 PORTC EQU 7H ;定义RC口数据寄存器地 PORTD EQU 8H ;定义RD口数据寄存器地址 TRISA EQU 85H ;定义RA口方向控制寄存器地址 TRISC EQU 87H ;定义RC口方向控制寄存器地址 TRISD EQU 88H ;定义RD口方向控制寄存器地址 ADCON1 EQU 9FH ;定义ADC模块控制寄存器1的地址 ;******************** Z EQU 2 ;定义0状态位的位地址 RP0 EQU 5 ;定义页选位RP0的位地址
[单片机]
<font color='red'>PIC单片机</font>实现LCD1602显示字母A
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved