PICマイコン+PICKit3で簡単なプログラムを作成して遊んでいるのですが、
ふと疑問に思ったことがあるので、質問します。
プログラムは2種類の値を用意し、スイッチの入力を見て片方をLCDに表示するといった
簡単なものですが、デバッグ中にmainプログラムの最終行まで実行した後、
再度mainプログラムの頭に戻ったとき、RAMの値がすべてクリアされている
ことに気が付きました。
当初の目論見ではRAMの値を使用して表示を切り替えるつもりだったので、少し困りましたが、
方法を変えて完成させました。少し調べてみると、mainプログラムが頭に戻ってきた時、startup.asm
のファイルを通り、RAMの値をクリアしていることが分かりました。
そこで質問なのですが、mainプログラムが頭に戻ってくるとRAMの値は必ずクリアされてしまう
ものなのでしょうか?そうだとすると、RAMの値を残したい場合はどうすれば良いのでしょうか?
ちなみにコンパイラはHITEC PICC-18です。
No.4ベストアンサー
- 回答日時:
main関数が終わる事は、そのプログラムを全て終わす事です。
一般にmain関数の作りは、初期処理を行った後にループするロジック
が入り、そのロジック内で再処理の方法や、終了判定を行う様に作ります。
終了判定された場合等に、後処理を行ったり直接main関数の最後を実行します。
→break関数、return関数、exit関数やgoto命令でも制御を移行出来ます。
従って、再処理やタイミング取りは、main関数の頭には戻らず、ループロジック内
や割込みルーチン等を利用して行う様に作ります。
No.5
- 回答日時:
main関数が終わる事は、そのプログラムを全て終わす事です。
一般にmain関数の作りは、初期処理を行った後にループするロジック
が入り、そのロジック内で再処理の方法や、終了判定を行う様に作ります。
終了判定された場合等に、後処理を行ったり直接main関数の最後を実行します。
break関数、return関数、exit関数やgoto命令でも制御を移行出来ます。
従って、再処理やタイミング取りは、main関数の頭には戻らず、ループロジック内
や割込みルーチン等を利用して行う様に作ります。
No.3
- 回答日時:
main関数が再度起動されているのは、意図的に行われてるのですか。
startup.asmは、あなたが書いたコードなのですか。
単に制御を失ったマイコンが、リセットされたか何かの理由で、初期状態に戻ってmain関数が呼ばれてルのではないかと推測してます。
もしそうなのであれば、ここでの質問の内容って意味無いですよね。
No.2
- 回答日時:
もし、本当にmain()からのリスタートが仕様だとすればEPROM等を実装して覚えておきたい変数をEPROMに記憶する必要があると思います。
そのプログラムはmain()からのリスタートが本当に正しい動作なのでしょうか、そこ確認した方が良いと思います。
No.1
- 回答日時:
>少し調べてみると、mainプログラムが頭に戻ってきた時、startup.asm
>のファイルを通り、RAMの値をクリアしていることが分かりました。
プログラムが終了し、再起動されている。
という状態になっているのでしょう。
であればmain()関数をコールするスタートアップ処理が走りますからクリアされることになるかと。
>そうだとすると、RAMの値を残したい場合はどうすれば良いのでしょうか?
「RAMの値」とやらがローカル変数の値…ということならば、グローバル変数にするかstatic変数に…となるのでしょうが……
今回の場合はスタートアップ処理が走っているので無理でしょう。
グローバル変数などはこの時に初期化されますし。
ということで、真っ当なら「main()を終了しないようなコードを書く」ということになるかと。
# そもそも…電源投入されたら動き続けるハズのPICでmain()を終了していいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C言語 数独】 C言語で9×9の数...
-
符号付きにすべきか、符号なし...
-
C言語 時刻差分の算出方法
-
再帰呼び出しを使いますか?
-
C言語 再帰処理のメリットとデ...
-
SQLの速度をあげるには・・・
-
Excel VBAにて、2GB超の点群デ...
-
Cのプログラムに無性にイライラ...
-
DoEvents関数って何?
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
-
大容量のメモリ確保をスワップ...
-
Mac 乗数の入力方法
-
Excel-VBAのmsgBox()の不思議
-
VBA
-
変換のプログラムを教えてくだ...
-
tex 郵便記号のだしかた
-
英数文字列のうちの数値を4桁に...
-
ソケット通信の送受信遅延-02 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
Excel VBAにて、2GB超の点群デ...
-
VBでの簡易電卓の作成(減算方...
-
C言語:関数を使うメリットとデ...
-
テキストファイルの空行をスキ...
-
プログラム上のCPU稼働率低減に...
-
Excel(VBA)でSetTimer関数を使...
-
ナップザック問題?をエクセル...
-
If Not c Is Nothing Then ~延...
-
プログラム 擬似コードとはどん...
-
基本情報技術者試験詳しい方へ...
-
ノットイコールを教えて下さい
-
符号付きにすべきか、符号なし...
-
C言語 時刻差分の算出方法
-
実行時のCPU使用率を増やしたい
おすすめ情報