• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC mainループについて)

PIC mainループでRAMの値がクリアされる問題について

このQ&Aのポイント
  • PICマイコン+PICKit3で作成したプログラムにおいて、mainプログラムが頭に戻ってくるとRAMの値がクリアされる問題が発生しました。
  • RAMの値を使用して表示を切り替える予定だったため、問題になりましたが、方法を変えて対応しました。
  • 調査の結果、mainプログラムが頭に戻ってきた時にはstartup.asmのファイルを通り、RAMの値がクリアされることが分かりました。RAMの値を残したい場合にはどうすればよいかについても調査しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • naw_ok
  • ベストアンサー率100% (1/1)
回答No.4

main関数が終わる事は、そのプログラムを全て終わす事です。 一般にmain関数の作りは、初期処理を行った後にループするロジック が入り、そのロジック内で再処理の方法や、終了判定を行う様に作ります。 終了判定された場合等に、後処理を行ったり直接main関数の最後を実行します。 →break関数、return関数、exit関数やgoto命令でも制御を移行出来ます。  従って、再処理やタイミング取りは、main関数の頭には戻らず、ループロジック内 や割込みルーチン等を利用して行う様に作ります。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • naw_ok
  • ベストアンサー率100% (1/1)
回答No.5

main関数が終わる事は、そのプログラムを全て終わす事です。 一般にmain関数の作りは、初期処理を行った後にループするロジック が入り、そのロジック内で再処理の方法や、終了判定を行う様に作ります。 終了判定された場合等に、後処理を行ったり直接main関数の最後を実行します。 break関数、return関数、exit関数やgoto命令でも制御を移行出来ます。  従って、再処理やタイミング取りは、main関数の頭には戻らず、ループロジック内 や割込みルーチン等を利用して行う様に作ります。

すると、全ての回答が全文表示されます。
  • akr
  • ベストアンサー率18% (32/173)
回答No.3

main関数が再度起動されているのは、意図的に行われてるのですか。 startup.asmは、あなたが書いたコードなのですか。 単に制御を失ったマイコンが、リセットされたか何かの理由で、初期状態に戻ってmain関数が呼ばれてルのではないかと推測してます。 もしそうなのであれば、ここでの質問の内容って意味無いですよね。

すると、全ての回答が全文表示されます。
  • ctmogawa
  • ベストアンサー率54% (6/11)
回答No.2

もし、本当にmain()からのリスタートが仕様だとすればEPROM等を実装して覚えておきたい変数をEPROMに記憶する必要があると思います。 そのプログラムはmain()からのリスタートが本当に正しい動作なのでしょうか、そこ確認した方が良いと思います。

すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>少し調べてみると、mainプログラムが頭に戻ってきた時、startup.asm >のファイルを通り、RAMの値をクリアしていることが分かりました。 プログラムが終了し、再起動されている。 という状態になっているのでしょう。 であればmain()関数をコールするスタートアップ処理が走りますからクリアされることになるかと。 >そうだとすると、RAMの値を残したい場合はどうすれば良いのでしょうか? 「RAMの値」とやらがローカル変数の値…ということならば、グローバル変数にするかstatic変数に…となるのでしょうが…… 今回の場合はスタートアップ処理が走っているので無理でしょう。 グローバル変数などはこの時に初期化されますし。 ということで、真っ当なら「main()を終了しないようなコードを書く」ということになるかと。 # そもそも…電源投入されたら動き続けるハズのPICでmain()を終了していいのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A