Top
HIDaspx
DownLoad
HIDasp高速化
制作
AVR関係
AVR_Monit
AVR_term
W32_term
HIDmon88
HIDtester
usbRS232
Arduino2313
デジタルテスター
ATmega88生活
KeyBoardマニア
KeyBoardマニアII
Arduino400
PICライター
ARMライター
赤外線リモコン
ARM
STM32ブートローダー
STM8S-Discovery改造
STM8S-OpenOCDライター
LPCXpresso
LPC用ブートローダー
NXP用LPCUSB
NXP用ブートローダー
MARY基板
LPC1114FN28
OpenOCD JTAGアダプター
OpenOCDビルド方法
arm-gccビルド方法
mapleIDEの改造
libmapleで仮想COM
PIC32
PIC32MX
Pinguinoで遊ぼう
ブートローダーを作る
シリアルブートローダー
USB仮想シリアル
USBカスタムデバイス
USB簡易モニター
USBオシロスコープ
USBホスト
PIC32でBluetooth
USBAudio
USBStudy
VGA出力に挑戦
BASICを動かす
WinUSB
勝手に改蔵*PIC32
PIC18F
HIDブートローダー
AVR/PIC両用ライター
ARMライター
usb汎用クラス
usbシリアル変換
usbキーボード変換
sdccを使いこなす
mcc18を使いこなす
HIDmon-2550
HIDmon-14K50
PICmonitor
試行錯誤の記録
UBWを試す
旧HIDboot
PIC18F2550試用記
PIC18F4550試用記
その他マイコン
NEC78K
RX62N
SH2A
H8
FM3
XPからubuntuに乗り換え
Android
Xen-hypervisor
Windows8カスタマイズ
開発日記
2015-04
ノウハウ
AVRUSB_Tips
HIDasp情報
汎用USB-IO
・
リンク
フリースペース
ゲストブック
旧コンテンツ
WinVista
インターフェース考
最新の20件
2022-07-25
2008-10
HIDasp高速化
H8/3048F
AutoTicketLinkName
2021-12-11
FormattingRules
2021-12-08
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/V-Z
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/H-K
2020-02-23
YukiWiki
PHP
PukiWiki
WikiWikiWeb
2018-12-19
SandBox
InterWiki
2015-05-07
2015-04
2015-05-02
MenuBar
編集
差分
PIC32memo の編集
-- 雛形とするページ --
(no template pages)
[[PIC32MX]] ------------- *CQ [#b9eb78e6] 『はじめて読む MIPS(リローデッド)』 by 中森章 - CQ出版社 -www.cqpub.co.jp/interface/TechI/Vol39/app/mips_asm.pdf -------------- *アーキテクチャー [#b8fcb184] -MIPS M4KとMIPS16eをサポート。 -MX1xx/2xxには、microMIPSのサポートは無い。 -MX1xx/2xxには、(割り込み応答高速化の)シャドウレジスタのサポートはない。(GP((このページの下に記述)) )のコピーのみ存在) -32bitレジスタはr0〜r31の32本 -r0は常に零。書き込んでも値は零のまま。 -r31(ra)はリターンアドレス(サブルーチン呼び出しの戻り番地を記憶) -そのほかには乗算結果を置くHI,LOレジスタとPCがある。 ~ -mips16eモードではレジスタは8本しか使えない(s0,s1,v0,v1,a0,a1,a2,a3)。 -mips16eモードではレジスタt8(分岐条件),sp(スタック),ra(戻り番地)が暗黙的に使用される。 ~ -------------- *MICROCHIP PIC32ファミリ リファレンスマニュアル [#u15c969c] ,CPU(必読),http://ww1.microchip.com/downloads/jp/DeviceDoc/61113D_JP.pdf ,割り込み,http://ww1.microchip.com/downloads/jp/DeviceDoc/61108G_JP.pdf ,input capture,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532813.pdf ,Config,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532843.pdf ,output compare,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532816.pdf ,comparator,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532822.pdf ,メモリー構成,http://ww1.microchip.com/downloads/jp/DeviceDoc/61115F_JP.pdf ,pgm,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532846.pdf ,pmp,http://ww1.microchip.com/downloads/jp/DeviceDoc/61128G_JP.pdf ,errata,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556114.pdf ,usb,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp534259.pdf ,I2C,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532834.pdf ,RST,http://ww1.microchip.com/downloads/jp/DeviceDoc/61118F_JP.pdf ,RTCC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532837.pdf ,SPI,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532831.pdf ,UART,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532828.pdf ,CVR,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532825.pdf ,CTMU,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556027.pdf ,オシレーター,http://ww1.microchip.com/downloads/jp/DeviceDoc/61112G_JP.pdf ,ウォッチドッグとパワーアップタイマ,http://ww1.microchip.com/downloads/jp/DeviceDoc/61114F_JP.pdf ,PWR,http://ww1.microchip.com/downloads/jp/DeviceDoc/61130G_JP.pdf ,PIO,http://ww1.microchip.com/downloads/jp/DeviceDoc/61120E_JP.pdf ,TMR,http://ww1.microchip.com/downloads/jp/DeviceDoc/61105F_JP.pdf ,フラッシュプログラミング,http://ww1.microchip.com/downloads/jp/DeviceDoc/61121E_JP.pdf ,PIC32MX,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556030.pdf ,DMAC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532840.pdf ,ADC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532819.pdf ,ADK,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp554073.pdf ---------------- *MIPS カルトFAQ [#df537566] **r31はスタックポインタと違うの? [#a430e0e2] -mips16e命令では、r29(sp)をリターンスタックに使用します。 -MIPS32命令では、''何と''、スタックポインタという機能を持った特殊レジスタはありません。 -ですが、コンパイラはr29(sp)をスタックポインタのように使用して、レジスタ退避などを行います。((push,pop命令のようなものはありません。通常のポインタ操作で行います。オートインクリメント、デクリメントもありません。)) -質問のr31(ra)はリターンアドレス(サブルーチン呼び出しの戻り番地を記憶)というレジスタで、 jal <番地> (サブルーチンコール命令のようなもの) -を実行したときにjalの次の番地のPC値がraにコピーされます。 -なので、サブルーチンがネストする場合は必ず、サブルーチン側でraを保存し、復帰しなければいけません。(スタックにpush,popします) -Leaf関数(内部でサブルーチンを呼んでない関数)に限り、raの保存、復帰が不要になるため、高速になります。 -速度ネックになるのは、一番外側の、たくさん呼ばれる関数ですから、それがLeafになる確率は高いです。 ~ **カーネルテンポラリ:k0(r26),k1(r27)レジスタの役割は? [#eb6f6437] -割り込みおよび例外処理時に(のみ)使用されるレジスタです。 -割り込み処理時以外では使ってはいけません。(割り込むたびに破壊され、いつ壊れるかわからないからです) -コンパイラは通常$k0,$k1を使用しないことが保証されています。 -割り込み発生時、$k0,$k1レジスタは破壊されますが、多重破壊を防ぐため、$k0,$k1操作はdi状態で実行されます。 ~ **GPって、何? [#kfc543d8] -28番レジスタに付けられた名前です。 r28=gp (グローバルポインタ) -共通データへの高速アクセスに使用、とありますが、何のことだか分かりませんが、 -その名の通り、グローバル変数群(64kB以内の一箇所に置く)を常に指しておくポインタです。 -これを設定したり使用するためには、mips-gccのコンパイルオプション''-G もしくは --gpsize''を指定してコンパイルする必要があります。 -グローバル変数が一箇所に置かれ、そのど真ん中あたり(というか先頭+32kB位置)にgpが設定されます。 -グローバル変数はすべて offset(gp) -でアクセスされるので、MIPS固有の2命令による絶対番地ロードが1命令で済むようになってめでたしめでたし(本当?) -グローバル変数が全部で64kBを越えるような場合はリンカエラーが出ます。 --その場合は、グローバル変数として扱う変数のサイズを-Gオプションで小さく(たとえば4byte以下)します。 --それでも64kBを越えるような(グローバル変数の多い)プログラムは書くべきではありませんが、越える場合は-Gオプションの使用を諦めてください。 ~ -実際のところ、コードサイズは少しだけ減りますが、まあ誤差の範囲です。 -割り込んだときに、gp参照コードはバグるので注意が必要です。(割り込み時にCPUの機能としてgpが別物にすりかわったりしますし、マルチタスク環境では各elf毎にgpの値は異なります)割り込みハンドラーは-Gオプション無しでビルドするほうがより安全です。
タイムスタンプを変更しない
[[PIC32MX]] ------------- *CQ [#b9eb78e6] 『はじめて読む MIPS(リローデッド)』 by 中森章 - CQ出版社 -www.cqpub.co.jp/interface/TechI/Vol39/app/mips_asm.pdf -------------- *アーキテクチャー [#b8fcb184] -MIPS M4KとMIPS16eをサポート。 -MX1xx/2xxには、microMIPSのサポートは無い。 -MX1xx/2xxには、(割り込み応答高速化の)シャドウレジスタのサポートはない。(GP((このページの下に記述)) )のコピーのみ存在) -32bitレジスタはr0〜r31の32本 -r0は常に零。書き込んでも値は零のまま。 -r31(ra)はリターンアドレス(サブルーチン呼び出しの戻り番地を記憶) -そのほかには乗算結果を置くHI,LOレジスタとPCがある。 ~ -mips16eモードではレジスタは8本しか使えない(s0,s1,v0,v1,a0,a1,a2,a3)。 -mips16eモードではレジスタt8(分岐条件),sp(スタック),ra(戻り番地)が暗黙的に使用される。 ~ -------------- *MICROCHIP PIC32ファミリ リファレンスマニュアル [#u15c969c] ,CPU(必読),http://ww1.microchip.com/downloads/jp/DeviceDoc/61113D_JP.pdf ,割り込み,http://ww1.microchip.com/downloads/jp/DeviceDoc/61108G_JP.pdf ,input capture,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532813.pdf ,Config,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532843.pdf ,output compare,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532816.pdf ,comparator,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532822.pdf ,メモリー構成,http://ww1.microchip.com/downloads/jp/DeviceDoc/61115F_JP.pdf ,pgm,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532846.pdf ,pmp,http://ww1.microchip.com/downloads/jp/DeviceDoc/61128G_JP.pdf ,errata,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556114.pdf ,usb,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp534259.pdf ,I2C,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532834.pdf ,RST,http://ww1.microchip.com/downloads/jp/DeviceDoc/61118F_JP.pdf ,RTCC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532837.pdf ,SPI,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532831.pdf ,UART,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532828.pdf ,CVR,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532825.pdf ,CTMU,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556027.pdf ,オシレーター,http://ww1.microchip.com/downloads/jp/DeviceDoc/61112G_JP.pdf ,ウォッチドッグとパワーアップタイマ,http://ww1.microchip.com/downloads/jp/DeviceDoc/61114F_JP.pdf ,PWR,http://ww1.microchip.com/downloads/jp/DeviceDoc/61130G_JP.pdf ,PIO,http://ww1.microchip.com/downloads/jp/DeviceDoc/61120E_JP.pdf ,TMR,http://ww1.microchip.com/downloads/jp/DeviceDoc/61105F_JP.pdf ,フラッシュプログラミング,http://ww1.microchip.com/downloads/jp/DeviceDoc/61121E_JP.pdf ,PIC32MX,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp556030.pdf ,DMAC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532840.pdf ,ADC,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp532819.pdf ,ADK,http://ww1.microchip.com/downloads/jp/DeviceDoc/jp554073.pdf ---------------- *MIPS カルトFAQ [#df537566] **r31はスタックポインタと違うの? [#a430e0e2] -mips16e命令では、r29(sp)をリターンスタックに使用します。 -MIPS32命令では、''何と''、スタックポインタという機能を持った特殊レジスタはありません。 -ですが、コンパイラはr29(sp)をスタックポインタのように使用して、レジスタ退避などを行います。((push,pop命令のようなものはありません。通常のポインタ操作で行います。オートインクリメント、デクリメントもありません。)) -質問のr31(ra)はリターンアドレス(サブルーチン呼び出しの戻り番地を記憶)というレジスタで、 jal <番地> (サブルーチンコール命令のようなもの) -を実行したときにjalの次の番地のPC値がraにコピーされます。 -なので、サブルーチンがネストする場合は必ず、サブルーチン側でraを保存し、復帰しなければいけません。(スタックにpush,popします) -Leaf関数(内部でサブルーチンを呼んでない関数)に限り、raの保存、復帰が不要になるため、高速になります。 -速度ネックになるのは、一番外側の、たくさん呼ばれる関数ですから、それがLeafになる確率は高いです。 ~ **カーネルテンポラリ:k0(r26),k1(r27)レジスタの役割は? [#eb6f6437] -割り込みおよび例外処理時に(のみ)使用されるレジスタです。 -割り込み処理時以外では使ってはいけません。(割り込むたびに破壊され、いつ壊れるかわからないからです) -コンパイラは通常$k0,$k1を使用しないことが保証されています。 -割り込み発生時、$k0,$k1レジスタは破壊されますが、多重破壊を防ぐため、$k0,$k1操作はdi状態で実行されます。 ~ **GPって、何? [#kfc543d8] -28番レジスタに付けられた名前です。 r28=gp (グローバルポインタ) -共通データへの高速アクセスに使用、とありますが、何のことだか分かりませんが、 -その名の通り、グローバル変数群(64kB以内の一箇所に置く)を常に指しておくポインタです。 -これを設定したり使用するためには、mips-gccのコンパイルオプション''-G もしくは --gpsize''を指定してコンパイルする必要があります。 -グローバル変数が一箇所に置かれ、そのど真ん中あたり(というか先頭+32kB位置)にgpが設定されます。 -グローバル変数はすべて offset(gp) -でアクセスされるので、MIPS固有の2命令による絶対番地ロードが1命令で済むようになってめでたしめでたし(本当?) -グローバル変数が全部で64kBを越えるような場合はリンカエラーが出ます。 --その場合は、グローバル変数として扱う変数のサイズを-Gオプションで小さく(たとえば4byte以下)します。 --それでも64kBを越えるような(グローバル変数の多い)プログラムは書くべきではありませんが、越える場合は-Gオプションの使用を諦めてください。 ~ -実際のところ、コードサイズは少しだけ減りますが、まあ誤差の範囲です。 -割り込んだときに、gp参照コードはバグるので注意が必要です。(割り込み時にCPUの機能としてgpが別物にすりかわったりしますし、マルチタスク環境では各elf毎にgpの値は異なります)割り込みハンドラーは-Gオプション無しでビルドするほうがより安全です。
テキスト整形のルールを表示する
ログインまたはアカウント作成