X



トップページ電気・電子
1002コメント278KB
AVRマイコン総合スレ Part40
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2018/01/27(土) 11:14:18.02ID:yaXvNyvZ
個人でも手軽に使えるAtmelのAVRマイクロプロセッサを中心に語るスレッドです

<公式サイト>
http://www.microchip.com/design-centers/8-bit/microchip-avr-mcus
・AVR Libc Reference Manual:
https://www.microchip.com/webdoc/avrlibcreferencemanual/install_tools_1install_avr_libc.html

<参考になるページ>
・AVRWiki: http://avrwiki.sourceforge.jp/cgi-bin/wiki.cgi?page=AVRWiki
・AVR情報多い-chanさんのpage: http://elm-chan.org/
・avrfreaks.net avrgccその他AVR関連の総本山(英語): http://www.avrfreaks.net/
・TAP-Config: http://ww2.tiki.ne.jp/~maro/
・AVR.jp 日本語のAVR資料他: http://www.avr.jp/
・ATMega168日本語データシート(翻訳中): http://awawa.hariko.com/chira-ura/
・AVR アセンブラのマニュアル(ユーザーズガイド): http://www.atmel.com/Images/doc1022.pdf
・インストラクション(命令セット)の解説: http://www.atmel.com/Images/doc0856.pdf
・条件付きアセンブルの解説(アセンブラ ver. 1.74対応):http://www.atmel.com/Images/doc2550.pdf
・アセンブラとCの連携方法: http://www.atmel.com/Images/doc1234.pdf

前スレ
AVRマイコン総合スレ Part39©2ch.net [無断転載禁止]©2ch.net
http://rio2016.5ch.net/test/read.cgi/denki/1499338233/
0595774ワット発電中さん
垢版 |
2018/07/31(火) 00:00:37.52ID:rTEkkHLP
ふぅ・・・
0596774ワット発電中さん
垢版 |
2018/08/01(水) 21:03:26.87ID:rf3mvI9O
https://www.clarestudio.org/elec/avr/opcode.html

このサイトでLDS命令などは32bitになっていますが、このような命令はどのように実行されるのでしょうか。
プログラムカウンタで指定されたアドレスから1word分の16bit読み込んでもすべて読み込めないようにみえるのですがどうしていのでしょうか。
0598774ワット発電中さん
垢版 |
2018/08/01(水) 21:32:14.86ID:9P9OsemN
命令手引き書を見たら分かるがRAMPDレジスタと合わせて読み込むよ
0599774ワット発電中さん
垢版 |
2018/08/01(水) 21:48:11.97ID:+OtgPWY8
2ワード命令でしょ
普通に1ワード目で命令を認識して、2ワード目のパラメータを取得してから実行。
だから処理サイクルが最低でも2クロック。
0601774ワット発電中さん
垢版 |
2018/08/01(水) 22:36:26.78ID:+OtgPWY8
アセンブラ職人は2クロックを嫌ってJMP命令を極力使わずRJMPにするとか、
古い話する奴が現れる前に書いておこう。
0603774ワット発電中さん
垢版 |
2018/08/01(水) 23:05:17.32ID:o4TPyvSP
普通のrjmpでも2サイクル掛からなかったっけ
だから単純ループでも展開したりする
0605774ワット発電中さん
垢版 |
2018/08/02(木) 00:19:55.58ID:9yaMHoFN
今日の一連の中ではLDSの質問なのにどこからRAMPDなんかに結びつくのかが一番不思議だな
0606774ワット発電中さん
垢版 |
2018/08/02(木) 07:00:31.04ID:41e0iAkB
つぅことでAVRは純粋な16ビットコードのCPUではないのだが、
32ビットコードが許されるなら、あれも入れてくれよぉ、これも入れてくれよぉ、
と諦めの悪いオジチャンはね、未練がましく思っちゃったりしちゃったりするんだよw
0607774ワット発電中さん
垢版 |
2018/08/03(金) 15:16:21.28ID:2cik8a3B
命令ビット数を増やせるなら、命令対象レジスタの制限を無くして、
全ての命令をR0〜R31で使えるようにして欲しい。
(LDI命令はR16〜R31しか使えない、など)
あとはアドレッシングかな。
Cプログラマには関係無い話しだが。
0608774ワット発電中さん
垢版 |
2018/08/03(金) 16:10:11.49ID:CdX7HvF8
呪文付けた特殊なポインタ使わないとプログラム領域のデータに触れないのがガン
普通に書くとconst付けてもRAMにコピーするからモッタイネ
0609774ワット発電中さん
垢版 |
2018/08/03(金) 16:52:59.01ID:RC3Cd+/z
ハーバードアーキテクチャそのものに文句言うのかよ・・・・
最近のシリーズは改良されてROMの内容もRAMエリアにマップされてるけどな。
0610774ワット発電中さん
垢版 |
2018/08/03(金) 17:34:12.94ID:vAYteczj
それはハーバード関係ない
ハーバードでも同じアドレス空間の物はいくらでもある
0612774ワット発電中さん
垢版 |
2018/08/03(金) 18:08:21.92ID:iqskRUXK
constでramにコピーするのは大抵のcコンパイラでそういう動作じゃね?
0613774ワット発電中さん
垢版 |
2018/08/03(金) 18:16:33.44ID:zgrwAsNF
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 };
0614774ワット発電中さん
垢版 |
2018/08/03(金) 19:19:10.89ID:vAYteczj
>>612
普通はROMだろ

ていうか、
コンパイラ関係ないし
リンカやリンカスクリプトとスタートアップコードの役目
0615774ワット発電中さん
垢版 |
2018/08/03(金) 20:12:36.55ID:r7/Tp+zM
>>613
4行目

PGM_P const list[] PROGMEM = {item1, item2, item3};
じゃダメですかい?
出先なんで確かめてないけど…
0618774ワット発電中さん
垢版 |
2018/08/03(金) 20:25:07.94ID:r7/Tp+zM
>>617
それだとコンパイルは通るけど期待してる動作しないんではないかと…
list[I]はFRAM空間へのポインタを返さなきゃいけないはずだけど
単にchar *だとRAM空間へのポインタに解釈されそうな…

勘違いだったらスマンです
0621774ワット発電中さん
垢版 |
2018/08/03(金) 21:09:04.62ID:8dFYIsL7
エラーメッセージにちゃんとそうしろって書いてあるのになあ
0622774ワット発電中さん
垢版 |
2018/08/03(金) 21:23:43.07ID:zgrwAsNF
>>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};
これらで無事に通りました。
皆様ありがとうございました!
0623774ワット発電中さん
垢版 |
2018/08/05(日) 02:41:46.46ID:wtqG7Zwj
>>546
今の新卒って95年生まれなのか…
子供の頃の体験がいつから記憶に残ってるか次第だが
小学校にあがる頃ぐらいまでの覚えがなければ、ブラウン管知らないって子は居るかもな
恐ろしい時代やで…Oh…
0626774ワット発電中さん
垢版 |
2018/08/05(日) 09:20:13.96ID:IGF1Dvym
有用性で言えば、新卒の知識の方がほどなくプラスに転じるだろな。
むろん転じない奴もいるが、そういうのがいるのは前の世代でも同じだし。
0629774ワット発電中さん
垢版 |
2018/08/05(日) 12:25:18.88ID:wtqG7Zwj
今30歳前後の奴だと二つ折りの携帯を使った経験があるから
アルファベットとテンキー打ちできそう

それ以下の世代はスマホばっかで、中のごく一部はろくにPC使ったことない奴もちらほら
同期よりキーパンチも遅くて、入社しばらくは給料泥棒そのものだったな
0633774ワット発電中さん
垢版 |
2018/08/05(日) 16:57:42.53ID:IGF1Dvym
若い人が怖いんだな。

怖いときのありがちな行動
・その人たちをひっくるめる
・その中の悪い要素、劣っている要素を探す
・それをあげつらって安心する

新しい人たちの優れた要素を伸ばし足りないところを補って、自分たちを超える存在にしていくのが先輩世代の役目なのに。

って何のスレだよ
0638774ワット発電中さん
垢版 |
2018/08/06(月) 03:24:54.70ID:Gycs85qo
>>635
うわぁ。。。電電板の初心者の居るスレで
マウント取ろうとしまくってるな
0641639
垢版 |
2018/08/08(水) 23:13:42.70ID:YdexMT+f
ありがと。買ってみます。
0646774ワット発電中さん
垢版 |
2018/08/10(金) 12:27:40.39ID:+H5++ClQ
某PICスレに比べて(内容はともかく)盛り上がりにかけるなーとか思ってたけど、やっとスレが進んだw

車のタコメータを作りたくて、ATMEGA328PからCAN通信させてSPI接続ほ液晶を繋いでみようと考えてるんだけど、なかなか良い液晶が見つからない…
大きいサイズでフルカラーで3000円くらいでおさまるやつ、ないのかなぁ?
みんなフルカラー液晶って何を繋いでる?
0647774ワット発電中さん
垢版 |
2018/08/10(金) 12:41:49.76ID:K7iAJxsi
今はAVRは単品では殆ど使わないからでは
Arduino連中はアーキテクチャには興味無いだろうし
0649774ワット発電中さん
垢版 |
2018/08/10(金) 14:44:02.86ID:I5fN941W
>大きいサイズで
こういう、自分の脳内で物事が完結してるヤツが多いよね、最近。
0651774ワット発電中さん
垢版 |
2018/08/10(金) 19:30:41.97ID:Zpe0Eavw
フルカラーってことはグラフィック?
SPI接続だと遅くないか?
(針の絵がトロトロするような)
0653774ワット発電中さん
垢版 |
2018/08/10(金) 20:46:54.82ID:+H5++ClQ
ごめん、液晶の大きさが曖昧だったね。
3インチくらい、画素数は320x240くらいを想定してました。

そっか、SPI接続じゃあ遅いかもしれないのかぁ、どうしようかな。

7セグいいなぁ、ちょっとトキメク。
0655774ワット発電中さん
垢版 |
2018/08/10(金) 21:29:48.01ID:U4ktDlEy
>>653
mega1281のメモリバスにILI9325搭載320x240のLCDを直結して描画した事があるけど
全画面単色塗りつぶしだけでも0.2秒くらい掛かっていた
SPI接続だと耐えがたい遅さになるんでないの?
0658774ワット発電中さん
垢版 |
2018/08/11(土) 00:58:56.69ID:BbWWFsXp
中で使う小物の表示器でSC1602飽きたのでQVGAモジュールを
使い回してるんだけど、いつだか7セグでデモ披露したところ

「TWENTY FOURみたいでカッコイイなw」

予想外なご意見・ご感想を頂いたので、光り物処分する予定だったけど
7セグにしたことがあった。
ドラマ観たことないので、こんな感じかな?と電源投入後に外側の棒が
クルッと一周する視覚効果付き。
0659774ワット発電中さん
垢版 |
2018/08/11(土) 01:16:03.34ID:ClBiBRnt
液晶が蔓延ってる現代社会において
7セグLEDって逆に新鮮でかっこい
0668774ワット発電中さん
垢版 |
2018/08/12(日) 08:00:28.28ID:1yhOLuui
7セグLEDが古くて新鮮な時代になりつつあるのか
言われてみりゃ確かに7セグのLEDは減ったな、液晶7セグは時計やリモコン類や電卓等々で現役だが
0669774ワット発電中さん
垢版 |
2018/08/12(日) 10:23:37.87ID:XGMLvbYR
液晶だと遅いって動画見せてくれてありがとう、液晶あきらめました。

7セグいいですね、使ってみたいけど初体験なんですよ。
点灯の明るさを変えたくてPCA9622DR(16ch)みたいなので制御したら2個単位だからありなのかな。
ってググってたら、秋月でWS2812B内蔵7セグ見つけて心ときめいたけど、大きさ1種類しかなくてぐんにょり。

車に乗せるのにVFDとかニキシー管とかマジックアイはちょっと…
コンパネあたりに内蔵させたいんですよー。

どうしようか迷う…
色々と悩んだり考えたり探したりする時間が一番楽しいんですよね。
0670774ワット発電中さん
垢版 |
2018/08/12(日) 13:15:02.15ID:1LGx1WJl
二機シー緩みたいに懐かしいデバイスとして復権するかもな>7セグLED
0673774ワット発電中さん
垢版 |
2018/08/12(日) 23:37:29.60ID:X/addiGf
>>672
SUBIがあるから、アセンブル時にどうとでもなるだろ
って事か、どうしても使いたきゃADIW使えって事じゃね?

コンパイラの最適化だとSUBIに置き換えちゃいそうな気がするけど…
0677774ワット発電中さん
垢版 |
2018/08/14(火) 20:56:36.49ID:BXaugE9D
>>672
前にBCD演算ルーチンを作った時に思ったのだが、
 AVRには10進桁上がりのフラグが無い。
 なので設計者はせめてもの償いにw
 ボローのフラグを即値減算命令で用意した
ではないだろうか?
0679774ワット発電中さん
垢版 |
2018/08/14(火) 21:22:48.74ID:BXaugE9D
ついでに書いちゃうけど、加算と減算の命令を用意しなかったのは
命令コード空間に制約があるから。

たとえば8ビット(0~255)即値系の命令(LDI R16,$FF や ANDI R31,$AAなど)を
全レジスタ(5ビット、0〜31)で使えるとしたら13ビットになり、
16ビット命令コードの残りはわずか3ビットしか無い。

これを解消して命令の種類を増やすために、AVRには命令毎に対象レジスタに制限があり、
これがAVRの使いにくさの一因ともなっている。
0680774ワット発電中さん
垢版 |
2018/08/14(火) 21:25:46.32ID:BXaugE9D
>これがAVRの使いにくさの一因ともなっている。

(個人的な感想です)
0684774ワット発電中さん
垢版 |
2018/08/15(水) 15:00:17.06ID:FjXZQlS9
>>683
時と場合とCPUによっては10進演算の方が有利な(早い、小さい)場合がある
10進入力→10進演算→10進出力
10進入力→16進変換→16進演算→10進変換→10進出力
選択肢は狭いよりも広い方が良い
0685774ワット発電中さん
垢版 |
2018/08/15(水) 15:05:34.64ID:1g8KmbAB
大した利点はないからこの先も使うことは無いし、俺の周りでは(面倒が増えそうなので)
使わせないが。
0686774ワット発電中さん
垢版 |
2018/08/15(水) 15:52:20.60ID:K7ZPGPJW
10進数演算ていつの時代だよ
保守的なx86だって切り捨てたっていうのに
0689774ワット発電中さん
垢版 |
2018/08/15(水) 16:14:39.30ID:K7ZPGPJW
printfを使うような場所で
10進16進の変換コストなんて誤差だ
0690774ワット発電中さん
垢版 |
2018/08/15(水) 16:48:55.10ID:FjXZQlS9
機械制御用の小さなCPUで、早くて小さいプログラムをアセンブラで書きたい場合がある
そういう要求が無ければ、有っても要求に応える能力が無ければ、御自由にどうぞ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況