0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MPLAB XC8编译器出现“fixup”错误怎么办

麦辣鸡腿堡 来源:Microchip微芯 作者:Microchip微芯 2023-01-22 15:03 次阅读

问:怎么来改正“fixup”错误?

答:这里假定你已经知道如何来定位导致fixup错误的代码位置。如果不清楚,请参看前面的问答“怎么来定位"Fixup error"信息?”。

Fixup错误通常是发生在PICC编译器转换两个不同bank指针类型时。在大多数的场合,这个错误是发生在传递一个bank指针给某一个只接受其他bank指针的函数,或者是分配一个bank指针给另外一个bank的指针。

要修正这个错误,你需要改变函数的声明,或者用bankx限定符来改变指针使它成为正确的指针类型。

要注意的是'const'指针可以访问所有的bank但是它不能被写入。还有,在PIC中档单片机里,bank0指针式是可以指向bank1数据的,它并不会产生fixup错误,反之亦然(译者注:因为PICC的指针操作是会采用FSR,FSR是8位的,它可以指向两个bank的数据)。同样地,bank2指针可以指向bank3而没有fixup错误,反之亦然。但是bank0或bank1指针就不能够指向bank2或bank3了(译者注:bank2和bank3的指针是大于8位的)。

下面是一个在指针分配上会产生fixup错误的示例:

bank2 char value; //变量在bank2里

char * ptr; //变量在bank0里

//const char * ptr; //可能的解决方法

void

func(char * param) //使用一个bank0指针作为参数

//func(bank2 char * param) //可能的解决方法

{

*param = 7;

}

int

main()

{

//下面会产生一个fixup错误,因为传递bank2指针给了函数

//而这个函数只接受bank0指针

func(&value);

//下面也会产生一个fixup错误,因为把一个bank2指针给bank0指针赋值

//两个指针的宽度是不一样的

ptr = &value;

}

还有一些fixup错误是因为'extern'声明和实际的声明不匹配而产生的。例如在'lib.c'里声明了一个全局变量:

//lib.c

bank3 char var;

//end lib.c

如果extern的声明像下面的话,就会产生一个fixup错误:

//lib.c

extern char var;

//正确的应该是: extern bank3 char var;

//end lib.c

一个好的习惯是把所有的'extern'声明以及函数的原型放到头文件里。然后#include这个头文件到需要声明该变量的文件中去,还有需要使用该变量的文件中去。这可以让编译器能够找出类型声明的不匹配。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1636

    浏览量

    49176
  • MPLAB
    +关注

    关注

    9

    文章

    215

    浏览量

    66936
收藏 人收藏

    相关推荐

    XC8编译器8位PIC MCU兼容吗?

    我有几个较老的项目与8位PIC MCU,这是编译与旧的高科技C编译器(V963)在MPLAB 8环境下。现在我想迁移到
    发表于 03-15 13:07

    XC8编译器中的eeprom_read/write宏出现问题

    我已经用带有MPLAB X IDE v3.15(和v3.25)的高科技v9.83编译器编写了一个程序,并且我想用MPLAB X IDE v3.25将它传输到XC8
    发表于 09-30 08:57

    MPLAB XC8 C编译器是否可以屏蔽/禁用有关pitch的咨询报告?

    微芯片MPLAB XC8 C编译器(标准模式)V1.41构建日期:2017年1月24日部分支持版本:1.41版权(C)2017微芯片技术公司。许可类型:节点配置::警告:(1458)标准
    发表于 04-22 10:02

    如何判断xc8编译器是否出现bug

    hii有一个有趣的问题。我认为是xc8编译器bug(我使用1.35和1.36自由版本和mplab)我在代码上定义了一些变量,比如#include...unsigned char a[8
    发表于 05-11 15:51

    MPLAB XC编译器免费下载

    MPLAB XC编译器免费下载
    发表于 11-23 16:07 58次下载

    MPLAB® XC8 C编译器的架构特性

    本视频介绍了MPLAB® XC8 C编译器的架构特性。该编译器编译过程不同于传统的编译器,采用
    的头像 发表于 05-23 12:47 6076次阅读
    <b class='flag-5'>MPLAB</b>® <b class='flag-5'>XC8</b> C<b class='flag-5'>编译器</b>的架构特性

    MPLAB C18编译器MPLAB XC8 C编译器的移植过程详细中文资料概述

    本文档概述了从针对PIC18 MCU的MPLAB® C编译器(以前的说法,本文中称为MPLAB C18)到MPLAB XC8 C
    发表于 06-29 11:25 47次下载

    MPLAB XC8 C编译器的用户指南详细中文资料概述免费下载

     MPLAB XC8 C 编译器是一种独立式的优化 ISO C90 (通常称为 ANSI C)编译器。它支持所有 8 位 PIC® 单片机:
    发表于 06-11 17:28 348次下载
    <b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>编译器</b>的用户指南详细中文资料概述免费下载

    如何将C源代码从MPLAB C18编译器移植到MPLAB XC8C编译器的详细概述

    本文档介绍了针对PIC18 MCU的MPLAB® C编译器(以前的说法,本文档称为MPLAB C18)与MPLAB XC8 C
    发表于 06-07 09:28 30次下载
    如何将C源代码从<b class='flag-5'>MPLAB</b> C18<b class='flag-5'>编译器</b>移植到<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b>C<b class='flag-5'>编译器</b>的详细概述

    MPLAB XC8入门教程之启动指南资料免费下载

    本文档为刚开始使用MPLABXC8 C编译器的程序员提供了一个起点,特别是那些不熟悉嵌入式编程或微芯片设备的程序员。
    发表于 12-28 16:02 44次下载

    MPLAB C18到MPLAB XC8的移植概述

    本文档概述了从针对PIC18 MCU的MPLAB® C编译器 (以前的说法,本文中称为MPLAB C18)到MPLAB XC8 C
    发表于 05-12 17:12 26次下载

    PIC16F877A 创建工程 (MPLAB X IDE @XC8)

    个软件都默认安装; 在MPLAB X IDE 中添加XC8编译器(如果已经存在,则不用修改);3.创建工程注:时钟源根据 自己的开发板选择(芯片内部没有时钟源,外部一定要有时钟电路,不然调试会
    发表于 11-16 17:51 9次下载
    PIC16F877A 创建工程 (<b class='flag-5'>MPLAB</b> X IDE @<b class='flag-5'>XC8</b>)

    PIC MCC配置与XC8编译器问题

    2021年11月6日MCC版本过高,低版本的XC8编译器会导致警告⚠。代码能够编译通过,但是在实际执行中会导致MCC配置的代码出现问题,导致不能达到MCC配置预设的效果。例如:在用较高
    发表于 11-16 20:06 12次下载
    PIC MCC配置与<b class='flag-5'>XC8</b><b class='flag-5'>编译器</b>问题

    MPLAB XC8 PIC汇编的简单介绍

    本指南介绍并说明了可使用适用于中档和PIC18 器件系列的 MPLAB XC8 PIC 汇编(PIC 汇编)编译的示例汇编程序。本文档中
    的头像 发表于 04-02 16:09 4968次阅读

    适用于AVR MCU的MPLAB XC8 C编译器用户指南

    电子发烧友网站提供《适用于AVR MCU的MPLAB XC8 C编译器用户指南.pdf》资料免费下载
    发表于 09-19 15:47 3次下载
    适用于AVR MCU的<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>编译器</b>用户指南