●●●くみこの組み込み相談室●●●
■ このスレッドは過去ログ倉庫に格納されています
0001くみこ
NGNGSTB/ゲーム機のゲーム以外のプログラムもOKよ!
0232くみこ
NGNG!!
それじゃただの「*内蔵*マイコン」じゃないの!
「*内臓*マイコン」ていうから人工臓器とか人造人間とか人体改造とか
マッドなサイエンスを語る板かと思ったのに!!
0233くーみん
NGNGペースメーカーは立派な内臓マイコンよ。私の作ったパルスがあなたの洞結節を
刺激しまくるの♥
考えてみれば人造臓器にマイコン応用されるならば、それが一番高度な応用よね?
低消費電流、エラーフリー、適応化、小型軽量化。緊張感ありそうで禿げそうね。
怖いわ。
0234デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNGここにいる組系のコテハンは全員根鎌だ。
気を付けろ。
0238デフォルトの名無しさん
NGNGおおPERTNER仲間がいた。うちでは愛用してる。なんとなく使いやすくて。。
日立のがひどすぎるんだな。
ちなみにH8/3006メインです。
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGMだと、ビットの開発やDSPで女性いたよ。派遣じゃなく社員で
って感じで多くはないな
0241デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNGうちももうすぐSH使う予定でやはりPARTNERでいこうと思ってる。
期待通りの使い勝手だった?
ところでSHくらいになるとみんなOS使うんだろうか。。
SH2なんだけど。
0245デフォルトの名無しさん
NGNGμITRONが、多いかな。
0246デフォルトの名無しさん
NGNGSH3とかSH4ならLinuxでも積んどけば? ってSH2か。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGRAMの容量ってどれくらいで稼動してますか?
リアルタイムOSのこと良く理解できてないのですが、今月のインタフェースの
特集記事を読んでるとTCBとか、データキューとか出てきて、
OSを使わない場合に比べメモリを大変消費しそうな気がしてなりません。
あとスタックエリアって、タスク間で独立してるんでしょうか?
漠然として初歩的な質問かもしれませんがよろしくお願いします。
0249くーみん
NGNGそーねー私がμITRON使った構成で一番少ないRAM容量は152Kbitかしら。
逆に一番大きいサイズで12Mbitね。サイズは工夫次第でどうとでもなるものよ。
流石に64Kbitを割り込むと苦しいけれど・・・。
スタック空間はタスクでユニークよ。割り込みのスタック空間を分けるかどうかは
システム毎にそれぞれに悩んで選択してハマってゆくわ。ほほほ。
0250にぶる
NGNGbitかい。あんたのところはbitかい。
64Kbit/8=8KByteなんてスタックだけで消費するぞ。
0251デフォルトの名無しさん
NGNG確かに、OSを使わない場合に比べメモリを消費します。
比較的メモリの消費の少ないOSの仕様としては「OSEK」というものがあります。
http://www-iiit.etec.uni-karlsruhe.de/~osek/
0252ななし
NGNG0253デフォルトの名無しさん
NGNGスリーサイズを教えてください。
ミリメートルオーダーは小数点一桁までで頼んだ
0254くみこ
NGNG上から106、78、94じゃゴルァ。
0255デフォルトの名無しさん
NGNG「変数MyInterestはNULLを返しました。」
0256くみこ
NGNG0257デフォルトの名無しさん
NGNG変数MyInterestをデストラクトしました・・
0258くーみん
NGNGあら?メモリって普通bitかWORDで表現しない?
WORDの場合は1WORD何bitかを明記するから結局はbit表現がメインよね?
64Kbitでも物によっては作れるわよ。
採算厳しいんだから節約しなきゃよね。
0259デフォルトの名無しさん
NGNG富豪的プログラミング推奨者のおれがなんで、
こんな仕事やらされてんだか。。。
0260デフォルトの名無しさん
NGNGJPEGを吐いてくれる
LSIとかCPUを作って!
0261260
NGNGいっこ1000円くらいで
0262デフォルトの名無しさん
NGNGRAM無しっつうのを見たこと有るよ。
0263248
NGNG回答ありがとうございます。
OSの実装方法がなんとなくわかってきました。
>262
RAM無しって、外付け分のこと?
ROM256Kbyte RAM10Kbyteぐらいなら内蔵してる
CPUがあるからできるってことですよね。
0264デフォルトの名無しさん
NGNG0266くーみん
NGNGRAM無しというのはレジスタのみで実装する特殊なアプリケーションの事よ。
話題には上がるけれどなかなかやれる事ではないわね。
>>265
くみこちゃん、最近荒れてるね。修羅場なの?
トンネルはいつか抜ける事ができるわ。頑張りましょう。
0267260
NGNG0268260
NGNGありがとう。どんな製品ですか?
HPがあれば教えてください。
0269デフォルトの名無しさん
NGNGこれなんとかする方法教えてくださいませ。
どうもエミュ無しでのデバッグ必要時に、シリアル通信で変数を参照できるように
するためにほとんどの変数がグローバルなのだそうです。
どなたか良いアイデアプリーズ。。
0270デフォルトの名無しさん
NGNGstruct{
}global;
の中に全部放り込むとか。
デバッガで一望できるよ。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG>>270
ども、早速の回答ありがとうございます。
今日会社でどんな感じになるのかいろいろ試してきます。
MAPファイルに各メンバのアドレスが出力されるのかちょい心配。。
0273269
NGNGそんなぁ。。(;´Д`)
0274デフォルトの名無しさん
NGNGソフトの方から来た人はグローバル変数=悪と
考える人が多いけどどうなんだろ?
自分の頭の中でマップできる数位使ってかまわんと
思うが。
0275デフォルトの名無しさん
NGNG一発で何やってるかワカるんならそれでも良い。
二年以上前に書いた自分のプログラムを見て
一発で何をやってるかわかるんなら、そのスタイルを貫いても良い。
0276デフォルトの名無しさん
NGNGで static に取ると 作ったツールとの相性からデバックし難いからグローバルにって
感じなのかな?
命名規則にユニット名でも付ける事ってしとけば大丈夫じゃない?
0277デフォルトの名無しさん
NGNGわからん奴なんているのか?
普通仕様書と設計書をみれば何もかも分かるじゃん。
分からんような資料を残す奴は人間のクズ。今すぐ氏ね。
0278デフォルトの名無しさん
NGNG大規模なコードになればなるほど、
細部のドキュメントは省かれるし
コードとの同期もとれなくなってくる。
半年後の自分を、新しくプロジェクトに加わった
新人だと思って、そいつにでもわかるようにコードを書け
ああ、でも、一行一行フローチャートか何かに書いてる
元COBOLERとかだったら、べつにそんなことしなくてもいいよ。
ドキュメントにない仕事すると怒られるからね。
ドキュメントを読めば、コードがわかる。
そうだろ?
0279デフォルトの名無しさん
NGNG個人的な実体験として、
ローカル変数に慣れるとグローバル変数を把握するのが
面倒になる。
確かに数が少なければ自分の頭の中でマップする労力もたいしたこと無いが
0であればさらに楽。
管理対象は少なければ少ないほどいい。
0280デフォルトの名無しさん
NGNGドキュメントをかかないならコードをみただけでわかるようにしとけ。
1行1行コメント付けてる奴は今すぐ氏ね。
コメント書かないやつは今すぐ氏ね。
「ここ不要」とかコメント残してる奴は今すぐ氏ね。
「あとはまかせた」とか書いてる奴も今すぐ氏ね。
0281デフォルトの名無しさん
NGNGコメントを書けとはいってないぞ
まあいいや。
0282269
NGNGで、構造体に放り込むのはどうもうまくなかったです。
MAPファイル(関数や変数がどこに配置されたか確認できる)っていうのがあるんですけど、
そこには構造体自体のアドレスは書いてあるけど、メンバのアドレスは書いてなかったです。
アラインメントを考慮して自分でアドレスを算出するのはミスがでそうで怖いですし。
同様に、staticをつけてファイルスコープにした変数も書かれないようでした。
SH2にHIMって環境で開発してるんですが、皆さんどうされてるんでしょうか?
10や20ならいいんですけど、さすがに100や200のグローバル変数は管理しきれないです。。
0283269
NGNG本当にどうしようもなかったら命名規約でごまかそうと思います。
でもせっかくCにはスコープって便利なものがあるのでできればこちらでなんとかしたいとこです。
開発環境であるHIMがstatic変数のアドレスも吐いてくれれば万事解決なんですけど、
今日調べた限りではそんな設定は見つかりませんでした。。
0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG考えるのが面倒なので、
構造体のメンバにcharの配列を要所要所に埋め込んで
そこに文字列入れてます。
慣れればMAPファイル見なくてもダンプ解析できます。
0286デフォルトの名無しさん
NGNG構造体の頭のアドレスがわかればメンバのアドレスなんてわかるだろ。
マニュアル見たか?
構造体が嫌ならサイズそろえて配列にでも入れておけ。
メモリダンプすりゃすぐ解るだろ。
割り込みを扱う以上グローバル変数は避けては通れん。
0287デフォルトの名無しさん
NGNGえーっとだな、char* szBuf="abcde\0";
宣言した6バイトの領域に対して、
p=realloc(szBuf,64);とかできる?(よーなきがしてきた)
そのときszBufは内部でfreeされておいらが最後にやるのは
free(p)ってやればいいんだな??
0288269
NGNG> 慣れればMAPファイル見なくてもダンプ解析できます。
どうもイメージがつかめないです。頭悪くてごめんなさい。
えと、構造体の中でさらにグループ分けして、そのグループごとの先頭アドレスを
切りのいいとこに合わせるためにchar配列を入れとくってことですか?って違うか。。
>>286
> 構造体の頭のアドレスがわかればメンバのアドレスなんてわかるだろ。
アラインメントを考慮して全メンバ分手計算するんでしょうか?
ミスりそうだし、なにより面倒だと思うんですが。。
> 割り込みを扱う以上グローバル変数は避けては通れん。
その負担を少しでも減らせないかな〜と良いアプローチがないか探してますです。
やりたいことが漠然としてたんですけど、文章書いてるうちにまとまってきました。
1.200程あるグローバル変数を構造体で10個程度にグループ分けしたい。
2.グローバルである必要のないものにはがんがんstaticをつけてファイルスコープに限定したい。
3.でも1,2をやるとMAPファイルにアドレスが出力されないので、通信で変数参照したいときに
アドレス調べるのがめんどい&間違えそう。
4.ということで構造体メンバ、およびstatic変数のアドレスを楽に間違いなく取得する方法探してます。
長文ゴメソ
0289くーみん
NGNG各タスクのタスクエントリでAUTOで構造体宣言を行えばいいのよ。
で、後は構造体のポインタをグローバル変数でタスク内に公開するの。
ヘッダを工夫すれば隠蔽できるし、スタックポインタの先頭に配置されるから
デバッグでも困らないわ。結構重宝する主婦の知恵ね。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGつーか、マルチポスト。
0293デフォルトの名無しさん
NGNGアセンブル後のリストからマップファイルの出力と突き合わせてstatic領域の定義を
グローバルequ文に拾い出すツール作ればいいだろ
組込系は 自分で必要なツール作るのが基本だよ
0294デフォルトの名無しさん
NGNG解析すれば拾い出せるかも!?
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNGだからこれも解析すれば道は拓けると思う。
大体PARTNERでは当たり前のようにみれるんだからな。。
0297269
NGNGデバッガは「HP Debug User I/F」ってやつです。
でも今回問題としている、「通信で変数を参照したい」ってのはこのソフトでのことではないです。
えと、現地でデバッグ&コンパイル&フラッシュ書き換えってことがあるらしいです。
その時エミュレータなんて使えないから以下のようなプログラムを利用してデバッグします。
シリアルケーブルで実機とノートパソコンをつないで、
例えばパソコンからターミナルソフトで「watch 0C000123 word<CR>」って送ると、
実機は「0C000123 03E8<CR>」ってな感じで変数の値を返すように組んであります。
実装は以下のようなイメージです。(実際はもっと泥臭いです)
switch ( size ) {
case 1:
Transmit("%08X %02X\r", address, *(byte *)address);
break;
case 2:
Transmit("%08X %04X\r", address, *(word *)address);
break;
case 4:
Transmit("%08X %08X\r", address, *(dword *)address);
break;
default:
Transmit("error\r");
}
ということで、デバッグするには変数のアドレスが必要なのですが、
static変数や構造体メンバのアドレスはどうすれば簡単にわかるだろう?ってことです。
>>289
まいった、、全然わからんです(;゚Д゚)
制御においてのタスクって何を表してるんでしょう?関数?モジュール?
>>293
objと一緒に吐かれるlstを見てみましたが、どうなってるのかようわからんかったです。。
>>294 >>296
期待をもってバイナリエディタとにらめっこしてみます。
またまた長文ゴメソ…
長いんでsage
0298くーみん
NGNG名前の衝突を避けるためにstatic宣言している変数がリンクリストファイルには
現れないんだけれどデバッグでは位置を知る必要があるって事ね。よくあるわ。
一つはstatic宣言でアサインされる領域を固定にする方法があるわね。
リンカのメモリ配置方法は法則があるから、事前にデバッガで調べておくと推測できる
ようになるわ。これはリンカオプションで実現できる事が多いので調べてね。
もう一つはμITRON等、タスク空間が分かれている場合等で、タスクループに入る前に
ローカル宣言する方法があるわね。
ローカル変数とはいえスタックポインタ上でアドレス固定となってしまうからアドレス
算出は安易に行えるわ。でも結構ソースをいじる事になりそうでお勧めできないわ。
Transmit()のような関数が実装されているのなら直接変数を吐き出すコードを埋め込ん
でおけばいいんじゃないの?現場では。
0299デフォルトの名無しさん
NGNG>どうもイメージがつかめないです。頭悪くてごめんなさい。
>えと、構造体の中でさらにグループ分けして、そのグループごとの先頭アドレスを
>切りのいいとこに合わせるためにchar配列を入れとくってことですか?って違うか。。
ちょっと違います。
構造体の中でさらにグループ分けして、そのグループごとの先頭に
検索用の文字列を埋め込みます。
目的のメンバの値を調べたいときは、そのグループの文字列をメモリダンプ
から検索して、先頭アドレスを見つけます。
そこから、暗算で目的のメンバのアドレスを算出します。
バカみたいな方法ですみません。
アドレス解析ツールを作りたかったのですが難しくて出来ませんでした。
うちのところは、現地から自動ダンプされたデータしか来ないので
この方法をとってますが、そちらのデバッカじゃ使えそうもないので
忘れてください。せめてメモリ検索ができればいいんですけど。
0300269
NGNG> 名前の衝突を避けるためにstatic宣言している変数がリンクリストファイルには
> 現れないんだけれどデバッグでは位置を知る必要があるって事ね。よくあるわ。
そのとーりです。ああ、、気持ちが伝わるって嬉しいことだなぁ。。( ´∀`)
えー、前者の方はまた明日調べてみます。ありがとー。
後者の方ってなにかOS使った場合なのでしょうか?
マイコンにOSってどんな環境になるのか想像もつかんです。う〜ん、やってみたい。
> Transmit()のような関数が実装されているのなら直接変数を吐き出すコードを埋め込ん
> でおけばいいんじゃないの?現場では。
調べたいとこがあったらそこにデバッグコードを挿入しろって解釈であってますか?
現在は調べたいstatic変数や構造体メンバがあると、デバッグ用のグローバル変数に
代入するコードを挿入してそれを前述のコマンドで見るようにしてます。
でも開発環境の入ったノートパソコンがない時とか、開発室と実験室(別館)を何度も
往復するハメになるので、再コンパイルが必要ない方法を見つけたいです。
>>299
なるほど、理解しました。
メモリダンプする通信コマンド追加すればうちでも使える場合がありそうです。
> アドレス解析ツールを作りたかったのですが難しくて出来ませんでした。
これがあれば何もかも解決するんですよね。
自分で作ろうにもかなり難しそうでひるんでます。
> せめてメモリ検索ができればいいんですけど。
これかなりいいですね。実装できないか検討してみます。
処理を占有するわけにはいかないから、かなり検索に時間かかりそうだけど^^;
いろいろアイデアありがとうございました。
0301デフォルトの名無しさん
NGNGDSPプログラミングについてですが、
MAC命令を実行するとはじめの実行時だけ3サイクルかかってあとは1サイクル
らしいのですが、
MAC X0,X0
MAC X1,X1
MACD X2,X2
このようなコードをループさせた場合
最初の実行には9サイクルかかって次からは3サイクル
なのでしょうか?それとも最初に5サイクルかかって
(はじめのMAC命令のみ3サイクル)次からは3サイクルという
風に動作するのでしょうか?
0302666
NGNGMAC X0,Y0
MAC X1,Y1
MACD X2,Y2
こんな感じですね。
0303デフォルトの名無しさん
NGNGスレタイトルの食い込みという言葉に反応して質問です。
組み込み系で Java を使う事にはどんなメリットがあるのでしょう?
プログラマが確保しやすいくらいしか思いつきません。
技術的なメリットってあるのですか?
VM の上で動くとか、ライブラリが充実しているとか、オブジェクト指向である
とかいった Java の特徴が生かされるような分野なのでしょうか?
0304くみこ
NGNGどういうループなのか知らないけど、ディレイドブランチで最適化された
ループなら1回目のMAC X0,X0だけ3サイクルで後は全部1サイクルに
なりそうだけど。
ていうかそんなコアな話題ならどこのなんていうDSPなのかくらい書いて
欲しいのよね!
0306302
NGNGありがとうございます!最初だけ3ですね!
あとどこのDSPだかわからないです、ごめんなさい。
0307くみこ
NGNGだから「ループが最適化されてるなら」って書いてあるでしょ!
どこのなにかわかんなきゃループが最適化されてるかどうかもわかん
ないじゃない。
データブックくらいないの?
0308デフォルトの名無しさん
NGNGベクタ定義が楽な奴。
漏れはSH2が使いやすかったけど他に何かある?
0309デフォルトの名無しさん
NGNGで、何かメリットがあるのでしょうか? 設計がし易いから?
それともそういう次元の話ではないという事でしょうか?
逆に、実行速度が遅いという Java の欠点はデメリットとならないのでしょうか?
いろいろパンフ等を見てみたりしているのですが、Java だぜ凄いだろ!
という調子の説明が多く、何故 Java なのかという切り口がありません。
結局 Java を謳っているのは技術的な視点からではなく、マーケティング的な
視点からなのでしょうか?
0310名無しサンプリング@48kHz
NGNG組み込みの人達って、数学や物理やってるんですよね?
電磁気、電気回路、電子回路、PLD・・・。とか。
0311デフォルトの名無しさん
NGNG組込みでJAVAを使うといっても、本当にどうなっても良い領域で
しか動作させていない。
メリットとしてはインターフェースガ同一ならばチップの違いはJAVA-VMが吸収する。
早い話が、どうでも良い上っ面の部分を誰でも書けるから。
0312302
NGNG0314デフォルトの名無しさん
NGNG組込みといっても分野は広い。
あんたが言ってるのはワンチップマイコン系の制御分野だな。
そっちはハード寄りなので回路の動きが解った方が良い。
0315デフォルトの名無しさん
NGNGマンマシンとかネットワークの上位とかではつかうかもね
でも、VMを乗せるメリットはあんまないかも、ROM、RAMの
制限がつらい。
0316デフォルトの名無しさん
NGNGセキュリティ/メモリ保護
たとえばネットワーク越しにプログラムをロードしたり
してもコードベリファイやってサンドボックス入れとけば、
バグまたは意図的にメモリ壊されたりしない。
C/C++だったらユーザーが作ったプログラムは、
メモリ空間分けないと怖くて実行できない。
アーキテクチャー独立
CPU/OSの選択肢が多い。
ゲームとかブラウザとかプロトコルスタックとかの開発者は
売り込み先が増やせる
J2SEと同じ環境でクロス開発もできる。
あと同じ様なコードだったら32bitRISCよりバイトコードのサイズが
小さくなるとおもうけど、クラスライブラリは肥大傾向になるし
メモリ消費はデカイから相殺。
0318デフォルトの名無しさん
NGNG食い荒らされてメモリの破片だらけになるんだよね。
0319デフォルトの名無しさん
NGNGまぁ、原理的にはってことで。
そりゃあプラットフォームの実装がバグってたり、
わざと穴開けてればしょうが無い。
0320くーみん
NGNG自動生成ね。でもそのツールのファーストユーザーだったりする事が多いから、
腰が引ける事が多いわ。
ポイントはJAVAを使うタスクを一番複雑なタスク(大抵の場合はユーザーI/F層ね)
に限定して後はCで実装する事よ。こうするとメモリ破壊をしている理由がある程度
判ってデバッグしやすいわ。でも個人的には懲りているかなぁ。
0321デフォルトの名無しさん
NGNGそもそもポインタの概念がない言語なんだからアドレス操作できない。
せいぜい確保した領域を参照するだけだ。
でも組み込みなんだから、それじゃお話にならんだろ。
0322デフォルトの名無しさん
NGNGJNIに頼んで直接いじれるクラスをもらうっすよ。
0323デフォルトの名無しさん
NGNGメモリリード・ライトメソッドを持ったスタブクラスを作って、
Cで書いた実装をJVMと一緒にコンパイルしちゃえば
ポインタもどきするのは簡単だけどね。(Sunに怒られるかも)
>>320みたいに、下層はRTOSが担当して上位アプリはJVMって
いう今主流の方法が一番無難かな?
(なんかnativeOS/JVM界面で色々問題が起きている気もするが)
ドライバとかでもUSBホストドライバの上位とか結構複雑だから
Javaで書いても良さそう
個人的にはXpressoとかAll Java solutionに惹かれてるんだけど
0324デフォルトの名無しさん
NGNGJ2ME/CLDCはJNIが無いために、
かえってJVMに色々組み込んで穴を増やしそうな気がする。
0325デフォルトの名無しさん
NGNG組み込みでCASEツールって流行ってるの?
時代はXPで、分厚いドキュメントよさようならっ、
になって欲しい
0326デフォルトの名無しさん
NGNGJavaのreal-time拡張の仕様書(JSR-1)を眺めたら、
メモリ管理クラスが色々あった。
class RawMemoryAccessとか
class PhysicalMemoryFactoryとか、
こういうのに沿って組み込んじゃえばいいんだろうけど、
ライセンスとか面倒なんだろうな。
遊びだったら気軽にCommunity Source License使って、
色々できるけど
0327デフォルトの名無しさん
NGNG組込みでは、DMA,割り込み,例外処理を使って正確な時間で高速な処理を
させているんだよ。Cで書いたコードでも高速にできる余地があれば
コンパイラが吐いたアセンブラのコードを修正する。
このような用途には当然JAVAは使えない。
JINIでポインタを書けると言ってもそれでドライバを書く気にはならんだろ。
せいぜいミドルウェアから上のアプリケーションだな。
でもJAVAは処理が遅いのでボトルネックになるだろう。
0328デフォルトの名無しさん
NGNGタイポとは思うけど…
×JINI ○ JNI
だよね?
0329くーみん
NGNGCASEツールはホントの上流工程で使うわよ。でもCASEツールを使っての修正は基本的にやらないわ。
理由は多分みんな判ってくれると思うけれど組み込みが泥臭い世界だからよ。
この工程でフォロー不可能なバグ出したら工作室の裏に呼び出されて正座させられて
説諭されるわ。私も何度泣かされた事やら(ノ><)
0330デフォルトの名無しさん
NGNG回路設計、アナログ、デジタルの知識が前提ですか。
あと、組み込みの仕事は一般的にどう思われているのか、
組み込みプログラマはどう思ってるのか、
給料的には、将来的には(人月5万のインド人に負けたりしますか?)等教えて下さい。
0331デフォルトの名無しさん
NGNG経験が無ければ、積めばいい。
回路は、TTLが分かればいいよ。
一般的には縁の下の力持ちと考えられてる
こっちとしてもその自負がある。
給料はインド人には勝ってる。
■ このスレッドは過去ログ倉庫に格納されています