AVRマイコン総合スレ Part40
■ このスレッドは過去ログ倉庫に格納されています
https://www.clarestudio.org/elec/avr/opcode.html このサイトでLDS命令などは32bitになっていますが、このような命令はどのように実行されるのでしょうか。 プログラムカウンタで指定されたアドレスから1word分の16bit読み込んでもすべて読み込めないようにみえるのですがどうしていのでしょうか。 命令手引き書を見たら分かるがRAMPDレジスタと合わせて読み込むよ 2ワード命令でしょ 普通に1ワード目で命令を認識して、2ワード目のパラメータを取得してから実行。 だから処理サイクルが最低でも2クロック。 アセンブラ職人は2クロックを嫌ってJMP命令を極力使わずRJMPにするとか、 古い話する奴が現れる前に書いておこう。 普通のrjmpでも2サイクル掛からなかったっけ だから単純ループでも展開したりする データシート見れば分かることをほんと面倒な奴らだ。 今日の一連の中ではLDSの質問なのにどこからRAMPDなんかに結びつくのかが一番不思議だな つぅことでAVRは純粋な16ビットコードのCPUではないのだが、 32ビットコードが許されるなら、あれも入れてくれよぉ、これも入れてくれよぉ、 と諦めの悪いオジチャンはね、未練がましく思っちゃったりしちゃったりするんだよw 命令ビット数を増やせるなら、命令対象レジスタの制限を無くして、 全ての命令をR0〜R31で使えるようにして欲しい。 (LDI命令はR16〜R31しか使えない、など) あとはアドレッシングかな。 Cプログラマには関係無い話しだが。 呪文付けた特殊なポインタ使わないとプログラム領域のデータに触れないのがガン 普通に書くとconst付けてもRAMにコピーするからモッタイネ ハーバードアーキテクチャそのものに文句言うのかよ・・・・ 最近のシリーズは改良されてROMの内容もRAMエリアにマップされてるけどな。 それはハーバード関係ない ハーバードでも同じアドレス空間の物はいくらでもある constでramにコピーするのは大抵のcコンパイラでそういう動作じゃね? Atmel Studio 7.0でコンパイルすると4行目でエラーになります。 エラーになる理由と対処方法をご回答頂けると有難いです。 const char item1[] PROGMEM = "string1"; const char item2[] PROGMEM = "string2"; const char item3[] PROGMEM = "string3"; const char* list[] PROGMEM = { item1, item2, item3 }; >>612 普通はROMだろ ていうか、 コンパイラ関係ないし リンカやリンカスクリプトとスタートアップコードの役目 >>613 4行目 PGM_P const list[] PROGMEM = {item1, item2, item3}; じゃダメですかい? 出先なんで確かめてないけど… const char * const list[] ... >>617 それだとコンパイルは通るけど期待してる動作しないんではないかと… list[I]はFRAM空間へのポインタを返さなきゃいけないはずだけど 単にchar *だとRAM空間へのポインタに解釈されそうな… 勘違いだったらスマンです const char* const list[] PROGMEM = { item1, item2, item3 }; const char const list[][6] PROGMEM = { item1, item2, item3 }; エラーメッセージにちゃんとそうしろって書いてあるのになあ >>616 >>621 ごめんなさい。 Error variable 'list' must be const in order to be put into read-only section by means of '__attribute__((progmem))' 頭が悪くてメッセージ意味が理解出来ず・・・お恥ずかしい const char* const list[] PROGMEM = { item1, item2, item3 }; PGM_P const aaa[] PROGMEM = {item1, item2, item3}; これらで無事に通りました。 皆様ありがとうございました! >>546 今の新卒って95年生まれなのか… 子供の頃の体験がいつから記憶に残ってるか次第だが 小学校にあがる頃ぐらいまでの覚えがなければ、ブラウン管知らないって子は居るかもな 恐ろしい時代やで…Oh… 有用性で言えば、新卒の知識の方がほどなくプラスに転じるだろな。 むろん転じない奴もいるが、そういうのがいるのは前の世代でも同じだし。 今30歳前後の奴だと二つ折りの携帯を使った経験があるから アルファベットとテンキー打ちできそう それ以下の世代はスマホばっかで、中のごく一部はろくにPC使ったことない奴もちらほら 同期よりキーパンチも遅くて、入社しばらくは給料泥棒そのものだったな 若い人が怖いんだな。 怖いときのありがちな行動 ・その人たちをひっくるめる ・その中の悪い要素、劣っている要素を探す ・それをあげつらって安心する 新しい人たちの優れた要素を伸ばし足りないところを補って、自分たちを超える存在にしていくのが先輩世代の役目なのに。 って何のスレだよ 初代ガンダムはまだ液晶ないからブラウン管なんだぜ。 >>635 うわぁ。。。電電板の初心者の居るスレで マウント取ろうとしまくってるな 某PICスレに比べて(内容はともかく)盛り上がりにかけるなーとか思ってたけど、やっとスレが進んだw 車のタコメータを作りたくて、ATMEGA328PからCAN通信させてSPI接続ほ液晶を繋いでみようと考えてるんだけど、なかなか良い液晶が見つからない… 大きいサイズでフルカラーで3000円くらいでおさまるやつ、ないのかなぁ? みんなフルカラー液晶って何を繋いでる? 今はAVRは単品では殆ど使わないからでは Arduino連中はアーキテクチャには興味無いだろうし >>646 そこは、液晶じゃなくて7セグのデカLEDっしょ >大きいサイズで こういう、自分の脳内で物事が完結してるヤツが多いよね、最近。 フルカラーってことはグラフィック? SPI接続だと遅くないか? (針の絵がトロトロするような) ごめん、液晶の大きさが曖昧だったね。 3インチくらい、画素数は320x240くらいを想定してました。 そっか、SPI接続じゃあ遅いかもしれないのかぁ、どうしようかな。 7セグいいなぁ、ちょっとトキメク。 >>653 mega1281のメモリバスにILI9325搭載320x240のLCDを直結して描画した事があるけど 全画面単色塗りつぶしだけでも0.2秒くらい掛かっていた SPI接続だと耐えがたい遅さになるんでないの? >>653 7セグのデッカイLEDはカッコいいぞ 特にアンバーはオススメ 中で使う小物の表示器でSC1602飽きたのでQVGAモジュールを 使い回してるんだけど、いつだか7セグでデモ披露したところ 「TWENTY FOURみたいでカッコイイなw」 予想外なご意見・ご感想を頂いたので、光り物処分する予定だったけど 7セグにしたことがあった。 ドラマ観たことないので、こんな感じかな?と電源投入後に外側の棒が クルッと一周する視覚効果付き。 液晶が蔓延ってる現代社会において 7セグLEDって逆に新鮮でかっこい 7セグならVFDにしようぜwww https://i.imgur.com/LLF4c2I.jpg IV-18なら8桁だから左3桁で時速と1つ空けて右4桁で回転数にしよう めちゃくちゃカッコいい >>660 これなんかのキット? それとも誰かの作例? >>665 見てわかんないやつはわかんないと思うよ 7セグLEDが古くて新鮮な時代になりつつあるのか 言われてみりゃ確かに7セグのLEDは減ったな、液晶7セグは時計やリモコン類や電卓等々で現役だが 液晶だと遅いって動画見せてくれてありがとう、液晶あきらめました。 7セグいいですね、使ってみたいけど初体験なんですよ。 点灯の明るさを変えたくてPCA9622DR(16ch)みたいなので制御したら2個単位だからありなのかな。 ってググってたら、秋月でWS2812B内蔵7セグ見つけて心ときめいたけど、大きさ1種類しかなくてぐんにょり。 車に乗せるのにVFDとかニキシー管とかマジックアイはちょっと… コンパネあたりに内蔵させたいんですよー。 どうしようか迷う… 色々と悩んだり考えたり探したりする時間が一番楽しいんですよね。 二機シー緩みたいに懐かしいデバイスとして復権するかもな>7セグLED >>672 SUBIがあるから、アセンブル時にどうとでもなるだろ って事か、どうしても使いたきゃADIW使えって事じゃね? コンパイラの最適化だとSUBIに置き換えちゃいそうな気がするけど… なんでADDIではなくてSUBIに統一するのですか? >>672 前にBCD演算ルーチンを作った時に思ったのだが、 AVRには10進桁上がりのフラグが無い。 なので設計者はせめてもの償いにw ボローのフラグを即値減算命令で用意した ではないだろうか? ゴメン >>672 ではなくて >>674 ね。 BCD演算ルーチンを書けば分ると思う。 ついでに書いちゃうけど、加算と減算の命令を用意しなかったのは 命令コード空間に制約があるから。 たとえば8ビット(0~255)即値系の命令(LDI R16,$FF や ANDI R31,$AAなど)を 全レジスタ(5ビット、0〜31)で使えるとしたら13ビットになり、 16ビット命令コードの残りはわずか3ビットしか無い。 これを解消して命令の種類を増やすために、AVRには命令毎に対象レジスタに制限があり、 これがAVRの使いにくさの一因ともなっている。 >これがAVRの使いにくさの一因ともなっている。 (個人的な感想です) アセンブラ使ってても、たいした問題じゃないけどな… >>683 時と場合とCPUによっては10進演算の方が有利な(早い、小さい)場合がある 10進入力→10進演算→10進出力 10進入力→16進変換→16進演算→10進変換→10進出力 選択肢は狭いよりも広い方が良い 大した利点はないからこの先も使うことは無いし、俺の周りでは(面倒が増えそうなので) 使わせないが。 10進数演算ていつの時代だよ 保守的なx86だって切り捨てたっていうのに X64でもprintfは糞遅いからなぁ 知らないってことは幸せだ printfを使うような場所で 10進16進の変換コストなんて誤差だ 機械制御用の小さなCPUで、早くて小さいプログラムをアセンブラで書きたい場合がある そういう要求が無ければ、有っても要求に応える能力が無ければ、御自由にどうぞ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる