PICに書き込むプログラムや変数の容量を少なくする方法

このQ&Aのポイント
  • 16f877のpicマイコンでプログラミング作業を行っています。マイコンプログラムはいろいろ制約があり大変です。
  • C言語でプログラムを書いているが、ccscでコンパイルすると容量不足でエラーが出る。変数を減らしても改善できない。
  • アセンブラでプログラムを書くといいと聞いたが、アセンブラはわからないのでCでの対策を教えてほしい。
回答を見る
  • ベストアンサー

PICに書き込むプログラムや変数の容量を少なくする方法

16f877のpicマイコンでプログラミング作業を行っています もともとPC上でのソフト開発がメインだったので マイコンプログラムはいろいろ制約があり大変です 現在C言語によってプログラムを書いているんですが ccscでコンパイルすると容量不足でエラーがでます not enough ram for valiaホニャララ 等がよく出ます。 マニュアルを読むと変数を減らせとかいろいろ書いてありますが 減らしても改善できません。 知人に聞くとアセンブラで書くといいよと言われましたが アセンブラはわからないのでCじゃないとだめです なにか容量をあまり取らないコーディングやその他のテクニックをご存知の方 教えてください、お願いします。 また、参考になる書籍やURL等がありましたら教えてください

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

  • ベストアンサー
  • techa
  • ベストアンサー率60% (41/68)
回答No.1

PICでRAM利用領域を減らそうとするなら、 1.グローバル変数をできるだけ利用しない 2.ローカル変数も最小限に 3.不必要な関数コールをやめる 4.ネストの多いループは極力減らす。 5.変数である必要のない内容はCONST定義を行ってフラッシュ内に移動する 6.正否判定のためのintはshortを利用して圧縮する という感じでしょうか。 他のマイコンと異なり、汎用レジスタが1つしかなくスタックも7段が最大という特徴をうまくごまかすために CCSでは究極の最適化を行っています。 ただ、このため不必要なバンクの切り替えやRAM利用も増えるわけで、思った以上に消費されているのが実情です。

kiyumoto
質問者

お礼

ありがとうございます、参考にします

関連するQ&A

  • C言語でPICのプログラムをしたいんですが。

    PICをC言語でプログラミングしたいと思っているんですがよくわかりません。 PCの画面に「Hello」とか出すことはできるんですが、PICで動作するCがわかりません。 LEDの点灯(点滅でも)やモーターを動作させたりするプログラムを書きたいんですが イマイチ良く分からず最初の定義文の構成とかもPICだとやっぱり違うのかなって 思っているんです。普通のCですら定義文や構成の意味が微妙な感じ何です。 でもCでかけたらカッコいいなって思ってます。 PICのCに関する入門みたいなサイトや文章があったら教えて下さい。 アセンブラやJAVAについても教えていただくとありがたいです。 まぁでもC言語メインでお願いします。

  • PICマイコンで変数値の保持

    PICマイコンで変数値の保持 PICマイコンでリセット時にリセット前の変数の値を1,2個保持して リセット後に用いたいのですが、なにかいい方法はありませんか? EEPROMは搭載してません。 また外部接続のパーツを増やさないのが望ましいです。 データ領域をうまく使う方法がありますかね? PIC24FJ32GA002です。 開発環境はMPLAB v8.35 C30コンパイラー です。 よろしくお願いします。

  • PICのプログラミングについて

    現在、PICのプログラミングについてアセンブラがいいかC言語がいいか迷っています。 基本的にLEDを使った物をつくりたいと思っており PWM制御でのLEDの調光、LEDの点滅の周期の変化などをつけた 物を作ろうと考えております。 アセンブラとC言語のPICにおいての違いを教えてください。 加えて、上のPWM制御についてはどちらでもできるのでしょうか? 2つのプログラム言語についての良い点、悪い点など教えてください よろしくお願いいたします。

  • PICマイコン シミュレーター

    低級言語で遊んでみたいと思っています。 そこで、PICマイコンをはじめる予定だったのですが、 電子工作の知識も手先の器用さも自身がない上、 電気系の資格も何も無いのでとても敷居が高く感じました。 PC上でPICマイコンをグラフィカルにシミュレートして、 アセンブラ等でプログラミングできるソフトがあれば紹介してください。 よろしくお願いします。

  • PICプログラム C言語とアセンブラ言語

    PIC18シリーズを使用して、プログラミングをしています。コンパイラはCCS-Cです。今まではすべてC言語で書いてきたのですが、アセンブラでしか設定ができない部分があり、今までのC言語のソースに加えてアセンブラを組み合わせようと思っているのですが、C言語とアセンブラを組み合わせることは可能なのでしょうか?

  • PICのプログラムカウンタについて

    プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。

  • PICでのI2C通信でのマスタ、スレーブの切り替え

    現在PIC18F2550同士で、I2C通信を行いたくアセンブラでプログラミングをしておりますが、教えていただきたい点があります。 ・マスターとスレーブは動作中に入れ替えることはできないのでしょうか? RS等から任意の信号を与えると、マスタとスレーブが切り替わるようなことがしたいのですが、どの書籍をみてもそのような事ができるとは書いてなく困っております。 ・PICだけでなくI2C通信を行うことのできるマイコンorCPU(プログラミングが簡単で高速動作できる)はあるのでしょうか?あればお教えいただきたいです。 以上よろしくお願いいたします。

  • 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?

    最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m

  • PICマイコンでプログラム!パソコンの画面に表示!!

    はじめまして。府立小に通う11歳男子です。 授業でマイコンというのを勉強しました。 たくさんの機械や冷蔵庫、炊飯器に入っているそうです。 また自分で思うように動かせるんですよね! PIC16F84というものを使いました。 RS232Cという線を使っていました。 プログラムは先生は作ってくれました。 まだよくわからないですが、自分のパソコンでPICマイコンで遊びたいです。 プログラムを持っていけば一緒に先生がPICマイコンにいれてくれます。 最初に自分のパソコンの画面に「NARUTO」と出したいです。 必要な部品や「NARUTO」と出すためのプログラムを教えてください。 お願いします。

  • PICマイコンのプログラムカウンタの操作法は?(C言語)

    HI-TechのPICC PRO 9.65を使ってPIC16F877Aのプログラミングをしています。 しかし、最近マイコンの動作が不安定になり、突然プログラムが暴走したりするので、プログラムカウンタに問題があると疑っています。 昔、アセンブラでプログラムしていた頃はPCLATHに書き込んでからPCLに書き込んだり、ORG命令などで対処していましたが、今回初めてPICCを導入したので対処の仕方がわかりません。 またCコンパイラによっては自動でPCLATHを繰り上げてくれるようなのですが、PICCの場合はどうなのでしょうか。 hexを除いてみると0x0800のあたりもびっしりコードでうまっているのですが。。。 ちなみに asm("ORG 0x0800"); などのようにC言語の中にアセンブラで記述してもうまく解決できませんでした。 PCLATH = PCLATH + 0b000?????; とか色々やってみたのですがだめでした。 そもそもヘッダやインクルードの内容がどの番地に書き込まれているかを調べる良い方法はないでしょうか。 1.PICCはPCの操作を自動でやってくれているのか 2.もしそうでなければどのようにして解決すればよいのか で宜しくお願い致します。

専門家に質問してみよう