[戻る]
新着表示

Re^5: プログラム領域 投稿者:Gokan 投稿日:2016/11/29(Tue) 22:21:48 No.762

下記ページの 「#orgの使い方」のページを参照してください。

http://www.picfun.com/ctechframe.html


> MPLAB XC8インストールしてみたのですが、アプリケーションがうまく動かなくて挫折しました。
> 何とかMPLAB IDEv7.5でうまく元の領域に戻る方法はないでしょうか?
> 一応プログラムはこんな構造なんですが
>
> 後半のROM領域のプログラム(関数)func(){}
>
> main(){
> while(1){
> jump_to_isr(後半のプログラム領域の最初のアドレス);}
> }
>
> func関数終了後 whileの最初に戻るようにしたい
>
>
> > CCSのC言語だったのですね。アセンブラかと思いました。
> > MPLAB XC8ならこういう問題は全く気にならなくなります。
> >
> > > >#org start,end
> > > でプログラムの後半部分指定してjump_to_isr(address)で後半の最初のアドレスを指定したところ後半のROMにプログラムが書けたのですが、今度は前半部にうまく戻れなくなってしまいました。
> > >
> > > jump_to_isr(address)で戻りたいそれらしきアドレスを指定したのですが、戻れず一番最初の#use delay()に戻ってしまいプログラムが止まってしまいます。#orgが先に無いからダメなのかと思い#orgを前半部分指定で書いて見たのですがコンパイルエラーが出てしまいます
> > >
> > >
> > >
> > > PIC16は2kW単位のページで構成されていて、命令で直接ジャンプ
> > > > できるのはページ内に限定されます。
> > > > ページを超えてジャンプするときにはページ切り替えをしてから
> > > > ジャンプ命令を実行する必要があります。
> > > > プログラム作成も、ページを意識して2kWを超えないように記述し
> > > > 超える場合はORGでページを指定してから記述する必要があります。
> > > >
> > > > Cコンパイラを使えばこういう問題は気にしなくてよくなります。
> > > >
> > > >
> > > > > 16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
> > > > > 調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

Re^4: プログラム領域mondai 投稿者:negishi 投稿日:2016/11/29(Tue) 19:18:02 No.761

MPLAB XC8インストールしてみたのですが、アプリケーションがうまく動かなくて挫折しました。
何とかMPLAB IDEv7.5でうまく元の領域に戻る方法はないでしょうか?
一応プログラムはこんな構造なんですが

後半のROM領域のプログラム(関数)func(){}

main(){
while(1){
jump_to_isr(後半のプログラム領域の最初のアドレス);}
}

func関数終了後 whileの最初に戻るようにしたい


> CCSのC言語だったのですね。アセンブラかと思いました。
> MPLAB XC8ならこういう問題は全く気にならなくなります。
>
> > >#org start,end
> > でプログラムの後半部分指定してjump_to_isr(address)で後半の最初のアドレスを指定したところ後半のROMにプログラムが書けたのですが、今度は前半部にうまく戻れなくなってしまいました。
> >
> > jump_to_isr(address)で戻りたいそれらしきアドレスを指定したのですが、戻れず一番最初の#use delay()に戻ってしまいプログラムが止まってしまいます。#orgが先に無いからダメなのかと思い#orgを前半部分指定で書いて見たのですがコンパイルエラーが出てしまいます
> >
> >
> >
> > PIC16は2kW単位のページで構成されていて、命令で直接ジャンプ
> > > できるのはページ内に限定されます。
> > > ページを超えてジャンプするときにはページ切り替えをしてから
> > > ジャンプ命令を実行する必要があります。
> > > プログラム作成も、ページを意識して2kWを超えないように記述し
> > > 超える場合はORGでページを指定してから記述する必要があります。
> > >
> > > Cコンパイラを使えばこういう問題は気にしなくてよくなります。
> > >
> > >
> > > > 16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
> > > > 調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

Re^3: プログラム領域mondai 投稿者:Gokan 投稿日:2016/11/29(Tue) 09:14:28 No.760

CCSのC言語だったのですね。アセンブラかと思いました。
MPLAB XC8ならこういう問題は全く気にならなくなります。

> >#org start,end
> でプログラムの後半部分指定してjump_to_isr(address)で後半の最初のアドレスを指定したところ後半のROMにプログラムが書けたのですが、今度は前半部にうまく戻れなくなってしまいました。
>
> jump_to_isr(address)で戻りたいそれらしきアドレスを指定したのですが、戻れず一番最初の#use delay()に戻ってしまいプログラムが止まってしまいます。#orgが先に無いからダメなのかと思い#orgを前半部分指定で書いて見たのですがコンパイルエラーが出てしまいます
>
>
>
> PIC16は2kW単位のページで構成されていて、命令で直接ジャンプ
> > できるのはページ内に限定されます。
> > ページを超えてジャンプするときにはページ切り替えをしてから
> > ジャンプ命令を実行する必要があります。
> > プログラム作成も、ページを意識して2kWを超えないように記述し
> > 超える場合はORGでページを指定してから記述する必要があります。
> >
> > Cコンパイラを使えばこういう問題は気にしなくてよくなります。
> >
> >
> > > 16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
> > > 調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

Re^2: プログラム領域mondai 投稿者:negishi 投稿日:2016/11/28(Mon) 22:16:41 No.759

>#org start,end
でプログラムの後半部分指定してjump_to_isr(address)で後半の最初のアドレスを指定したところ後半のROMにプログラムが書けたのですが、今度は前半部にうまく戻れなくなってしまいました。

jump_to_isr(address)で戻りたいそれらしきアドレスを指定したのですが、戻れず一番最初の#use delay()に戻ってしまいプログラムが止まってしまいます。#orgが先に無いからダメなのかと思い#orgを前半部分指定で書いて見たのですがコンパイルエラーが出てしまいます



PIC16は2kW単位のページで構成されていて、命令で直接ジャンプ
> できるのはページ内に限定されます。
> ページを超えてジャンプするときにはページ切り替えをしてから
> ジャンプ命令を実行する必要があります。
> プログラム作成も、ページを意識して2kWを超えないように記述し
> 超える場合はORGでページを指定してから記述する必要があります。
>
> Cコンパイラを使えばこういう問題は気にしなくてよくなります。
>
>
> > 16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
> > 調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

Re: プログラム領域mondai 投稿者:Gokan 投稿日:2016/11/28(Mon) 17:26:59 No.757

PIC16は2kW単位のページで構成されていて、命令で直接ジャンプ
できるのはページ内に限定されます。
ページを超えてジャンプするときにはページ切り替えをしてから
ジャンプ命令を実行する必要があります。
プログラム作成も、ページを意識して2kWを超えないように記述し
超える場合はORGでページを指定してから記述する必要があります。

Cコンパイラを使えばこういう問題は気にしなくてよくなります。


> 16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
> 調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

プログラム領域が50%使えない 投稿者:negishi 投稿日:2016/11/26(Sat) 21:14:53 No.756

16f87でプログラムを書いてコンパイルするとOut of ROM、A segment or the program is too large main と出てコンパイルエラーが出てしまいます。
調べたらROM使用量50%までは大丈夫だと分かりました。でも半分も残っているのにもうプログラムが書けないのは何でなのでしょう。どうしたら残り50%も使えるのかわかる方がいたら教えて頂きたいです。

Re^2: GPS 投稿者:梅村和弘 投稿日:2016/11/24(Thu) 20:11:22 No.755

ありがとうございます。挑戦してみます。

> 電源まわり、5Vが必要、電池は内蔵 などなどが異なるので
> そのままという訳にはいきませんね。
> でもシリアルインターフェースは同じなのでプログラムは
> そのままでも動くかもしれません。ただし、実際に送られてくる
> データ形式が異なるかもしれませんから、一部表示が異なる
> ようになるかもしれません。
>
>
> > PIC24F制作例にあります携帯型GPSロガーを製作してみようと思います。日本の人工衛星「みちびき」の電波も拾うため、秋月電子のGPSモジュール「GYSFDMAXB」を使ったGPS受信キット(C-MOSロジックレベル、非同期シリアル信号)を使いたいのですが、GPS-52Dをそのまま入れ替えるだけで利用することはできるのでしょうか。ご教示いただければ幸いです。

Re: GPS 投稿者:Gokan 投稿日:2016/11/23(Wed) 21:20:02 No.754

電源まわり、5Vが必要、電池は内蔵 などなどが異なるので
そのままという訳にはいきませんね。
でもシリアルインターフェースは同じなのでプログラムは
そのままでも動くかもしれません。ただし、実際に送られてくる
データ形式が異なるかもしれませんから、一部表示が異なる
ようになるかもしれません。


> PIC24F制作例にあります携帯型GPSロガーを製作してみようと思います。日本の人工衛星「みちびき」の電波も拾うため、秋月電子のGPSモジュール「GYSFDMAXB」を使ったGPS受信キット(C-MOSロジックレベル、非同期シリアル信号)を使いたいのですが、GPS-52Dをそのまま入れ替えるだけで利用することはできるのでしょうか。ご教示いただければ幸いです。

GPS 投稿者:梅村和弘 投稿日:2016/11/23(Wed) 18:19:34 No.753

PIC24F制作例にあります携帯型GPSロガーを製作してみようと思います。日本の人工衛星「みちびき」の電波も拾うため、秋月電子のGPSモジュール「GYSFDMAXB」を使ったGPS受信キット(C-MOSロジックレベル、非同期シリアル信号)を使いたいのですが、GPS-52Dをそのまま入れ替えるだけで利用することはできるのでしょうか。ご教示いただければ幸いです。

PIC32MZ LogScop 投稿者:五十嵐隆規 投稿日:2016/10/09(Sun) 21:23:03 No.714

PIC32MZ2048ECG064の使い方を教えてください。
PICでロジックスコープ実験を行っています。
PIC32MX250F128B、PIC32MX695F512Lはプログラムを
RAMに転送し実行するとno-waitで実行しているようです。
同様のことをPIC32MZ2048ECG064でおこなっても動作しません。
仕様書にはSYNCI命令を使うと記載されていますが
命令の使い方を理解できていません。
動作成功されている方、方法を教えていただきたいです。
最高速データ取込したいのでアセンブラですが
C言語でもOKです。

ロジックスコープのデータ取込プログラムは下記です
レジスターのデータ
LI t0,0x80000000 // t0=0x8000000(RAM先頭アドレス)
LI s8,0xBF880000 // PORTBの上位アドレス
データ取込プログラム
LBU t1,0x6120(s8) // PORTBからt1に8bit取込
SB t1,0x0000(t0) // t1を0x80000000番地に保存
LBU t1,0x6120(s8) // PORTBからt1に8bit取込
SB t1,0x0001(t0) // t1を0x80000001番地に保存
以下同様
→1データを処理するのに2命令です。
クロックを96MHzにすれば48MHzの周期で取込します(48MSa/s)

PIC32MZ2048ECG064の使い方が解らないのでまず下記プログラムで
実験中です。クロックは8MHzです。
LI t0,0x0000000F
TES0:
SW t0,PORTB // 2命令に変換されます
B TES1 // 1命令
NOP // 1命令 遅延スロット
TES1:
SW $0,PORTB // 2命令に変換されます
B TES0 // 1命令
NOP // 1命令 遅延スロット

1サイクル、8命令なので1MHz(Duty=50%)の波形を出力するプログラムです。
しかしPIC32MZ2048ECG064で成功していません。

状況
PIC32MX250F128B(FLASH ROMで実行) 1MHz
PIC32MX250F128B(RAMに転送して実行) 1MHz
PIC32MX695F512L(キャッシュOFF/FLASH ROMで実行) 1MHz
PIC32MX695F512L(RAMに転送して実行) 1MHz
PIC32MZ2048ECG064(全キャッシュOFF/FLASH ROMで実行) 80kHz(Duty50%)
PIC32MZ2048ECG064(全キャッシュON/FLASH ROMで実行) 800kHz(Duty50%でない)
PIC32MZ2048ECG064(RAMに転送して実行) 動作しない

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |

- WebForum -