MPLabX IDE5.4で最も単純なアセンブリファイルを作成する方法
MPLabX IDE5.4でアセンブリコーディングを学び始めたところです。ハードウェア、エミュレーター、またはデバッガーを接続せずに、オブジェクトコードファイルを作成し、アセンブリファイルからリストファイルを生成したいだけです。IDEが機能するかどうかを確認するだけです。しかし、可能な限り単純な組立ラインを構築しても、あいまいなエラーメッセージが表示され続けました。
図[1-6]に示すように、XC8(pic-asアセンブリコンパイラまたはMPASMアセンブラの別名)の統合とともにMPLabX IDEを適切にインストールする必要があります。何時間も質問した後、バンドルされていることに気付くまで、MPASMコード用のCコンパイラが必要な理由を検索します)。次に、1行のコメントと1つのend
命令を含むアセンブリファイルの作成をテストしました。アセンブリは正常にビルドされましたが、リストファイルの場所が見つかりません(すべてのディレクトリを検索している* .lstファイルが1つも見つかりませんでした)。
前end
に命令を追加するとすぐに、図[7]に示すようにビルドプロセスが失敗しました。
- アセンブリコードがビルドされないのはなぜですか?
- 私の構築プロセス(失敗または成功)が他の人のようにリストファイルを生成しなかったのはなぜですか


[編集]これ
がアセンブリコードファイルです。プロジェクトはステップ[1-6]から生成されました。org、clrw、endの3行の命令で新しいアセンブリファイル(FooFile.asm)を作成しました。

回答
マイクロチップ社は、MPLABXv5.40の最新リリースを使用して8ビットアセンブリ言語アプリケーションを開発することを非常に困難にしました。
PIC16F84Aのサンプルプロジェクトを作成するのに役立つように、ここにあります。
これはpic-as(v2.20)ソースコードです:
;
; File: main.S
; Target: PIC16f84A
; Author: dan1138
; Date: 2020-08-20
; Compiler: pic-as(v2.20)
; IDE: MPLABX v5.40
;
; Description:
;
; Example project for the PIC16F84A controller using the pic-as(v2.20) tool chain.
;
; Add this line in the project properties box, pic-as Global Options -> Additional options:
; -Wa,-a -Wl,-pPor_Vec=0h,-pIsr_Vec=4h
;
; PIC16F84A
; +----------:_:----------+
; <> 1 : RA2 RA1 : 18 <>
; <> 2 : RA3 RA0 : 17 <>
; <> 3 : RA4/T0CKI OSC1 : 16 <- 4MHz crystal
; ICSP_VPP -> 4 : MCLR OSC2 : 15 -> 4MHz crystal
; GND -> 5 : GND VDD : 14 <- 5v0
; <> 6 : RB0/INT PGD/RB7 : 13 <> ICSP_PGD
; <> 7 : RB1 PGC/RB6 : 12 <> ICSP_PGC
; <> 8 : RB2 RB5 : 11 <>
; <> 9 : RB3 RB4 : 10 <>
; +-----------------------:
; DIP-18
PROCESSOR 16F84A
PAGEWIDTH 132
RADIX DEC
#include <xc.inc>
; PIC16F84A Configuration Bit Settings
config FOSC = HS ; Oscillator Selection bits (HS oscillator)
config WDTE = OFF ; Watchdog Timer (WDT disabled)
config PWRTE = OFF ; Power-up Timer Enable bit (Power-up Timer is disabled)
config CP = OFF ; Code Protection bit (Code protection disabled)
skipnc MACRO
btfsc STATUS,STATUS_C_POSITION
ENDM
skipnz MACRO
btfsc STATUS,STATUS_Z_POSITION
ENDM
;
; Power-On-Reset entry point
;
PSECT Por_Vec,global,class=CODE,delta=2
global resetVec
resetVec:
PAGESEL main ;jump to the main routine
goto main
;
; Data space use by interrupt handler to save context
PSECT Isr_Data,global,class=RAM,space=1,delta=1,noexec
;
GLOBAL WREG_save,STATUS_save
;
WREG_save: DS 1
STATUS_save: DS 1
PCLATH_save: DS 1
;
; Interrupt vector and handler
PSECT Isr_Vec,global,class=CODE,delta=2
GLOBAL IsrVec
;
IsrVec:
movwf WREG_save
swapf STATUS,W
movwf STATUS_save
movf PCLATH,W
movwf PCLATH_save
;
IsrHandler:
;
IsrExit:
movf PCLATH_save,W
movwf PCLATH
swapf STATUS_save,W
movwf STATUS
swapf WREG_save,F
swapf WREG_save,W
retfie ; Return from interrupt
;objects in bank 0 memory
PSECT MainData,global,class=RAM,space=1,delta=1,noexec
max: DS 1 ;reserve 1 byte for max
tmp: DS 1 ;reserve 1 byte for tmp
/* find the highest PORTB value read, storing this into the object max */
PSECT MainCode,global,class=CODE,delta=2
main:
BANKSEL TRISB ;starting point
movlw 0xFF
movwf BANKMASK(TRISB) ;
BANKSEL max
clrf BANKMASK(max)
loop:
BANKSEL PORTB ;read and store port value
movf BANKMASK(PORTB),w
BANKSEL tmp
movwf BANKMASK(tmp)
subwf max,w ;is this value larger than max?
skipnc
goto loop ;no - read again
movf BANKMASK(tmp),w ;yes - record this new high value
movwf BANKMASK(max)
goto loop ;read again
END resetVec
可能であれば、私のgitリポジトリからMPLABXプロジェクト全体のコピーを入手してください。マイクロチップ社がまだ十分に詳細に文書化していない、MPLABXでのアセンブリ言語プロジェクトの設定について学ぶ必要があることがいくつかあります。
マイクロチップが私にこれをするのに十分なお金を払えなかった場合、私は従業員ではありません。
学校が秋のセッションでPICアセンブリ言語を教え始めるにつれて、MPLABXツールの問題がさらに問題になると思います。この答えの私の目標は、より多くの学生がラメツールの些細な問題のためにイライラしたり失敗したりしないように手助けしようとすることです。
Microchip社がMPLabXとXC8について持っているドキュメントは、おそらく私が今まで読んだ中で最悪のもののいくつかです。アセンブラをMPLabX IDE 5.4で動作させるために、複数のソースから読み取ったものをメッシュ化する必要がありました。これが、エラーや警告メッセージなしでアセンブルできるアセンブリコードです。
PROCESSOR 16F84A
#include <xc.inc>
PSECT code
org 00
loop: clrw
end loop
私が読んだチュートリアルと本はすべて、XC8のように、現在の代替品ではなく、MPASMアセンブラーを使用しています。MPASMと古いMPLabを使用すると、純粋なアセンブリコードがビルドされるだけです。しかし、現在のXC8として、あなたは含めてオフに開始する必要があり、PIC-として/Applications/microchip/xc8/v2.20/pic/include/xc.incそれはへの指令ポインティングあり/マイクロチップ/ xc8 / V2 /アプリケーション。 20 / PIC /含む/ pic.incターンでの指令ポインティング有する/Applications/microchip/xc8/v2.20/pic/include/ic_as_chip_select.incに最終的にポイントする/Applications/microchip/xc8/v2.20/をPSECTを定義するpic / include / proc / pic16f84a.inc:
psect udata,class=RAM,space=SPACE_DATA,noexec
psect udata_bank0,class=BANK0,space=SPACE_DATA,noexec
psect code,class=CODE,space=SPACE_CODE,delta=2
psect data,class=STRCODE,space=SPACE_CODE,delta=2,noexec
psect edata,class=EEDATA,space=SPACE_EEPROM,delta=2,noexec
あいまいな理由が何であれpsect
、アセンブリコードをラップアラウンドする必要があります。説明は次のようになります(何について話しているのか、C関数呼び出しをブラケットラップするようにアセンブリコードをラップする必要がある理由がわかりません):
Psects(プログラムセクションの略)は、プログラムの関連部分をグループ化して保持するコンテナです。これらの部分のソースコードは、ソースファイル内で物理的に隣接していない場合や、複数のモジュールに分散している場合もあります。これらは、リンカによってメモリに配置される最小のエンティティです。
リストファイルについて:リストファイルの読み取りまたは出力の手順は、MPLAB®XIDEユーザーズガイド(127ページのセクション5.16)に記載されています:ウィンドウ>デバッグ>出力> DisassemblyListingFile。または、ProjectProperties / pic-asLinker / CustomLinkerOptionsに挿入することでリストファイルを/MyProject/disassembly/listing.disasm(Microchipフォーラムやガイドが示唆する* .lst形式ではありません!)に出力することもできます(言及やいずれかのユーザーガイドの説明と、XC8コマンドラインでコンパイルする例が記載されているMPLAB®XC8PICアセンブラユーザーズガイド(組み込みエンジニア向け)を読んで、どこに何を挿入するかを推測します。IDEで生成されたリストファイルのいずれも、すべての詳細を提供するわけではありません。命令のベクターアドレスも表示されません。-code=0h -Wa,-a
Disassembly Listing for FooProject
Generated From:
/Users/*******/Desktop/Foo/dist/default/production/Foo.production.elf
--- /Users/*******/Desktop/Foo/FooFile.asm ------------------------------------------------------------
1: PROCESSOR 16F84A
2: #include <xc.inc>
3: PSECT code
4: ; a commend
5: org 00
01FF 0103 CLRW 6: loop: clrw
7: end loop
私は自分の答えを受け入れません。誰かが私の発見に対処するのを手伝ったり、psectが存在する理由と、リストファイルにベクターアドレスを表示する方法を説明したりできる場合は、彼/彼女の答えを受け入れます。
[編集] MPLabX 5.4またはX8(pis-as)CLIで-Wa、-aオプションを使用してリストファイルを出力するには。
//コンパイラがCプリプロセッサを前処理するには、ソースファイルの拡張子が* .Sである必要があります$ sudo pic-as -mcpu = 16F84A -Wa、-a SourceFileName.S -o OutputFolderName / OutputFileName
