0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MPLAB XC8編譯器出現(xiàn)“fixup”錯誤怎么辦

麥辣雞腿堡 ? 來源:Microchip微芯 ? 作者:Microchip微芯 ? 2023-01-22 15:03 ? 次閱讀

問:怎么來改正“fixup”錯誤?

答:這里假定你已經(jīng)知道如何來定位導(dǎo)致fixup錯誤的代碼位置。如果不清楚,請參看前面的問答“怎么來定位"Fixup error"信息?”。

Fixup錯誤通常是發(fā)生在PICC編譯器轉(zhuǎn)換兩個不同bank指針類型時。在大多數(shù)的場合,這個錯誤是發(fā)生在傳遞一個bank指針給某一個只接受其他bank指針的函數(shù),或者是分配一個bank指針給另外一個bank的指針。

要修正這個錯誤,你需要改變函數(shù)的聲明,或者用bankx限定符來改變指針使它成為正確的指針類型。

要注意的是'const'指針可以訪問所有的bank但是它不能被寫入。還有,在PIC中檔單片機(jī)里,bank0指針式是可以指向bank1數(shù)據(jù)的,它并不會產(chǎn)生fixup錯誤,反之亦然(譯者注:因為PICC的指針操作是會采用FSR,F(xiàn)SR是8位的,它可以指向兩個bank的數(shù)據(jù))。同樣地,bank2指針可以指向bank3而沒有fixup錯誤,反之亦然。但是bank0或bank1指針就不能夠指向bank2或bank3了(譯者注:bank2和bank3的指針是大于8位的)。

下面是一個在指針分配上會產(chǎn)生fixup錯誤的示例:

bank2 char value; //變量在bank2里

char * ptr; //變量在bank0里

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

void

func(char * param) //使用一個bank0指針作為參數(shù)

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

{

*param = 7;

}

int

main()

{

//下面會產(chǎn)生一個fixup錯誤,因為傳遞bank2指針給了函數(shù)

//而這個函數(shù)只接受bank0指針

func(&value);

//下面也會產(chǎn)生一個fixup錯誤,因為把一個bank2指針給bank0指針賦值

//兩個指針的寬度是不一樣的

ptr = &value;

}

還有一些fixup錯誤是因為'extern'聲明和實際的聲明不匹配而產(chǎn)生的。例如在'lib.c'里聲明了一個全局變量:

//lib.c

bank3 char var;

//end lib.c

如果extern的聲明像下面的話,就會產(chǎn)生一個fixup錯誤:

//lib.c

extern char var;

//正確的應(yīng)該是: extern bank3 char var;

//end lib.c

一個好的習(xí)慣是把所有的'extern'聲明以及函數(shù)的原型放到頭文件里。然后#include這個頭文件到需要聲明該變量的文件中去,還有需要使用該變量的文件中去。這可以讓編譯器能夠找出類型聲明的不匹配。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1607

    瀏覽量

    48977
  • MPLAB
    +關(guān)注

    關(guān)注

    9

    文章

    215

    瀏覽量

    66710
收藏 人收藏

    評論

    相關(guān)推薦

    XC8編譯器8位PIC MCU兼容嗎?

    我有幾個較老的項目與8位PIC MCU,這是編譯與舊的高科技C編譯器(V963)在MPLAB 8環(huán)境下?,F(xiàn)在我想遷移到
    發(fā)表于 03-15 13:07

    XC8編譯器中的eeprom_read/write宏出現(xiàn)問題

    我已經(jīng)用帶有MPLAB X IDE v3.15(和v3.25)的高科技v9.83編譯器編寫了一個程序,并且我想用MPLAB X IDE v3.25將它傳輸?shù)?b class='flag-5'>XC8
    發(fā)表于 09-30 08:57

    MPLAB XC8 C編譯器是否可以屏蔽/禁用有關(guān)pitch的咨詢報告?

    微芯片MPLAB XC8 C編譯器(標(biāo)準(zhǔn)模式)V1.41構(gòu)建日期:2017年1月24日部分支持版本:1.41版權(quán)(C)2017微芯片技術(shù)公司。許可類型:節(jié)點配置::警告:(1458)標(biāo)準(zhǔn)
    發(fā)表于 04-22 10:02

    如何判斷xc8編譯器是否出現(xiàn)bug

    hii有一個有趣的問題。我認(rèn)為是xc8編譯器bug(我使用1.35和1.36自由版本和mplab)我在代碼上定義了一些變量,比如#include...unsigned char a[8
    發(fā)表于 05-11 15:51

    MPLAB XC編譯器免費下載

    MPLAB XC編譯器免費下載
    發(fā)表于 11-23 16:07 ?58次下載

    MPLAB? XC8 C編譯器的架構(gòu)特性

    本視頻介紹了MPLAB? XC8 C編譯器的架構(gòu)特性。該編譯器編譯過程不同于傳統(tǒng)的編譯器,采用
    的頭像 發(fā)表于 05-23 12:47 ?5869次閱讀
    <b class='flag-5'>MPLAB</b>? <b class='flag-5'>XC8</b> C<b class='flag-5'>編譯器</b>的架構(gòu)特性

    MPLAB C18編譯器MPLAB XC8 C編譯器的移植過程詳細(xì)中文資料概述

    本文檔概述了從針對PIC18 MCU的MPLAB? C編譯器(以前的說法,本文中稱為MPLAB C18)到MPLAB XC8 C
    發(fā)表于 06-29 11:25 ?47次下載

    MPLAB XC8 C編譯器的用戶指南詳細(xì)中文資料概述免費下載

     MPLAB XC8 C 編譯器是一種獨立式的優(yōu)化 ISO C90 (通常稱為 ANSI C)編譯器。它支持所有 8 位 PIC? 單片機(jī):
    發(fā)表于 06-11 17:28 ?346次下載
    <b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>編譯器</b>的用戶指南詳細(xì)中文資料概述免費下載

    如何將C源代碼從MPLAB C18編譯器移植到MPLAB XC8C編譯器的詳細(xì)概述

    本文檔介紹了針對PIC18 MCU的MPLAB? C編譯器(以前的說法,本文檔稱為MPLAB C18)與MPLAB XC8 C
    發(fā)表于 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>的詳細(xì)概述

    MPLAB XC8入門教程之啟動指南資料免費下載

    本文檔為剛開始使用MPLABXC8 C編譯器的程序員提供了一個起點,特別是那些不熟悉嵌入式編程或微芯片設(shè)備的程序員。
    發(fā)表于 12-28 16:02 ?44次下載

    MPLAB C18到MPLAB XC8的移植概述

    本文檔概述了從針對PIC18 MCU的MPLAB? C編譯器 (以前的說法,本文中稱為MPLAB C18)到MPLAB XC8 C
    發(fā)表于 05-12 17:12 ?26次下載

    PIC16F877A 創(chuàng)建工程 (MPLAB X IDE @XC8)

    個軟件都默認(rèn)安裝; 在MPLAB X IDE 中添加XC8編譯器(如果已經(jīng)存在,則不用修改);3.創(chuàng)建工程注:時鐘源根據(jù) 自己的開發(fā)板選擇(芯片內(nèi)部沒有時鐘源,外部一定要有時鐘電路,不然調(diào)試會
    發(fā)表于 11-16 17:51 ?9次下載
    PIC16F877A 創(chuàng)建工程 (<b class='flag-5'>MPLAB</b> X IDE @<b class='flag-5'>XC8</b>)

    PIC MCC配置與XC8編譯器問題

    2021年11月6日MCC版本過高,低版本的XC8編譯器會導(dǎo)致警告?。代碼能夠編譯通過,但是在實際執(zhí)行中會導(dǎo)致MCC配置的代碼出現(xiàn)問題,導(dǎo)致不能達(dá)到MCC配置預(yù)設(shè)的效果。例如:在用較高
    發(fā)表于 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 匯編)編譯的示例匯編程序。本文檔中
    的頭像 發(fā)表于 04-02 16:09 ?4700次閱讀

    適用于AVR MCU的MPLAB XC8 C編譯器用戶指南

    電子發(fā)燒友網(wǎng)站提供《適用于AVR MCU的MPLAB XC8 C編譯器用戶指南.pdf》資料免費下載
    發(fā)表于 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>用戶指南