AVRマイコン総合スレ Part40
■ このスレッドは過去ログ倉庫に格納されています
atmel studioで"sprintf"関数を使おうとしたらヘッダファイルstdio.hのインクルードだけでなく、
リンカーの指定:
Use vprintf library(-Wl,-u,vfprintf)にチェックを入れ
-lprintf_flt フラグを追記する
https://startingelectronics.org/articles/atmel-AVR-8-bit/print-float-atmel-studio-7/
をやれって言われたんだけどなんでこんな面倒なことさせられるの?
PCでC言語書いてたときはこんな面倒なことやらされた記憶が無い 前から実数を文字にしてシリアル通信でPCのコンソールに表示しても
ちゃんと表示されないので桁挙げて整数にしてたが
これやればいけるのか へー >>753
出来上がりのバイナリサイズが激増するけどな… 純正ライブラリのprintf周りは実装がヘビーだから
ライトなサブセットとか必要な機能だけ抜き出して
使うのは常識だと思ってたがな
探せばライトな実装のソースあるから探してみ アニメオタクさんのxprintfいつもお世話になってます ヒープの実装とかやってられっか!そんな暇じゃねー(ちゃんと動かす自信ない)
てことで、必要なとこだけ適当に作るわ。 attiny13に入らないものは机上の空論、絵に描いた餅。 AVRのメインストリームは50円のattiny13だろ。 オラの使用頻度は tiny2313 → mega328 → mega1284 の順。
ほとんどの場合、I/Oの点数で決る。 ATTiny44って需要ないのかな?
1個50円で4KBあってピンが14本あって
ほとんどのことが出来るんだけど、世界的に需要がないね 俺も第一選択肢は2313だったけど、最近1616に変わった。 「ほとんどのこと」って個人差が激しすぎる表現だよね。
tiny13しか要らない人もいれば、xmega128を使い切る人もいる。 それがその人間が持つ「世界」なんだろ
そっとしといてやれよ 電電板の「ほとんど」は自分の性格の悪さを競うところだからネw そもそもどこでATtiny44を1個50円で売ってるんだよ…
俺には見つけられない 少なくともattinyでCを自由に使うことはできない。メモリの制約ありまくり。 そりゃメモリの制約じゃなくて自身のスキルの制約でしょ。 ∩___∩ |
| ノ\ ,_ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ (>>773)
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
\ " / | |
\ / ̄ ̄ ̄ / >>772
BCD演算ルーチンも作れないような技術レベルの人が、
プログラム設計時にBCDとバイナリのプログラムサイズ、実行速度の比較検討も出来ないような人が、
小さくて早いプログラム、に何の興味も無い人が、
tinyのプログラミングをCで済ませようとするのは、当ったり前でしょ? 要らん苦労をすることもないからな
趣味ならやっつけ上等だ
仕事なら・・・
ご愁傷さま >>772
いつの時代だよ…
メモリのせいでCを使わないなんてtinyでも
ほとんど有り得ない。アセンブラで下手くそな
コードかくより、コンパイラの最適化で吐かれ
たコードの方が効率良いぐらい。
どうしてもアセンブラで書かなきゃ困る場面は、
1クロックが問題になる時ぐらい
その場合でも、その部分だけしかアセンブラで
書かないけど… USARTの送信緩衝レジスタ空き割り込みとSPIの送信完了割り込みって実際に送り終わってからかなり遅れて発生してる?
送信クロック8MHzで64bit送ってるんだけどもなんか思ったより通信頻度があがらない >>779
割り込みハンドラの問題じゃないの
そういうときこそインラインアセンブラ使うんだよ
該当箇所のソース晒してみ? >>779
超手抜きプログラムでUSARTの検証をしてみた
#define F_CPU ( 24UL * 1000 * 1000 )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR( USART_TX_vect, ISR_NAKED )
{
asm volatile (
"sbi 0x09, 2 \n\t"
"nop \n\t"
"sbi 0x09, 2 \n\t"
"reti \n\t"
);
}
int main( void )
{
DDRD = 0xff, PORTD = 0x00;
UBRR0 = 0;
UCSR0B = (1<<TXCIE0) | (1<<TXEN0);
sei();
while ( 1 ) {
_delay_ms( 100 );
UDR0 = '@';
}
}
https://i.imgur.com/ta8Imkt.jpg
大体、152〜153クロックくらい遅延する感じかな?
そもそも、このプログラムで遅延が測定できているかは不明だけどw >>781
ごめん
16〜17クロックくらいの遅延だね >>780
もともとCで書いてないよ
普通のアセンブラ
64bit転送するのに20μ秒くらいかかるね 割り込みで6クロックで次データレジスタに入れてるのに64bit送出に20μ秒かかる
転送は1バイトあたり16クロックで1μ秒なんだから
余計な時間が18クロック近くあることになる SPIの話なのか、USARTのSPIモードの話なのかがまず見えん。
SPIならデバイスによっては送信二重バッファ無いし。 どっちも試して
USARTのSPIモードだと20μ秒、SPIだと23μ秒かかる
SPIは送信完了しか割り込みがないのと
使わないMISOが入力モードに固定されるからUSARTの方を使ってる 3us変わってるってことは二重バッファの効果は出てるってことやね。
割り込み処理の内容が重いと思われるが、ソースが無いと何とも・・・
16MHz動作だろうが1バイト送る間にたった16CPUクロックしかないんだもんな。 余談だが、xmegaのDMA使って16MHzクロックのSPIが遅延無しで動くのには笑った。 >>788
>>784で書いたけどUDREベクターの割り込みの処理内容は6クロック分しかないのよ
ポインタをインクリメントして配列からUDRに次バイトを入れるだけだ
6クロックでデータ入れて16クロックで送ってるのに次のデータの送信が始まるのが送信終わりのクロックから18クロック後になる
つまり1フレームに40クロックかかってる
本当にUDRが空になった瞬間に割り込み処理に入ればジャンプ入れても1フレームは26クロックで済むハズ 実験だしSREGのPUSHとPOP省いてもこれなの
とにかく何故かUDREベクターにジャンプするのが遅い
CKOUT出してロジアナでXCKと合わせて監視するとわかる
シフトレジスタに投げたら転送中にUDRに次を入れたいのに
送信が始まって33クロックも後にこられても…16クロックの時点で送信終わってるのにw
これじゃ実効bpsが3.2MHzしかでないよ bpsがMHzておかしいなまぁ言いたいことはわかるからいいか
明日もうちょっと実験してみる mega328pでUDREベクタの内容をこれで試してみた。
UDRR0=0設定できっちり17クロック毎に割り込む。
何か別の割り込み無限にが動いてないか?
たった6クロックの内容ならコード出しなよ。
.global USART_UDRE_vect
USART_UDRE_vect:
nop
nop
ldi XL,0xAA
sts UDR0, XL
reti 確かに>>793のコードでnopを一つ減らすか、ベクターテーブルをrjmpで生成する
Relax Branchesオプションを指定するかして1クロック節約すれば遅延無しの実質8Mbpsになる。
安物のオシロでもこれくらいなら見れる。 > メモリのせいでCを使わないなんてtinyでもほとんど有り得ない。
w 2313でCを使っていて困ったことなどほぼ無いんだが > 2313でCを使っていて困ったことなどほぼ無いんだが
天才プログラマー現るw あなたの世界では私は天才の部類なんですか。それは光栄です。
GPS校正の7セグデジタル時計、ステップモーターの等加速度コントローラ、
フルカラーLED電子ホタル、電子ルーレットなんてのが今ぱっと思い出せる2313作品です。
もちろん処理によってはアセンブラ関数も利用していますが、ベースはAtmelStudioでGCCですね。 >>798
え?
なんか、時代に取り残されてない?
avr-gccが吐くコードを見たことないでしょ
ほとんどオーバーヘッドないぞ? >>799
なんか大海の広さは知ってるからあえて大海に出ない井の中の蛙みたいですね。 大海を知らないから井の中の蛙と呼ぶのであって
知ってて出ないなら、冒険者ではないにしても賢者かもしれんよね アセンブラなぁ
スタートアップコードとか
コンパイルした結果がおかしい時に見る位だな
後はデバッガでの逆アセウインドゥか
昔は通信で同期取るときとか命令表見てキリキリ書いたものだが
今時アセンブラ使わなきゃならない場面て何がある? >>803
あなたの趣味がより資源のチープなデバイスに無理矢理収めることなんですかね?
それも立派な趣味です。
私はあくまで「動かすこと」が趣味ですから、目的や規模に合わせてデバイスを変えてるだけです。
50円や100円程度の価格差は、私の趣味の範疇ではほぼ無意味なので。
フルアセンブラによる開発は昔さんざん「やらさられた」のでもう飽きました。
まあそのせいか、私はまだアセンブラ関数を使う方だと思いますけど。
何より複数人数で開発するのにフルアセンブラは無理がありすぎですわ。 散々アセンブラ使ってると公言しておいて今時アセンブラ使わないとか言われてもね。
同一人物だとは思いますが二人して論理破綻してることに気づいてないんですか?
やはり大海を知ってる井の中の蛙ですな。 あのぉ、私は「アセンブラ関数は」使います。「フルアセンブラ」をしないだけで。
使わなきゃいけないかはともかく、使いたい場面は私にはあります。
>>804さんとはちょっと違うのは明白じゃないですか? >>807
いつも思うんだけどさ
おサルのお前がさっさと進化して2足歩行すれば
マウントも取られずに済むんちゃうん? >>809
それ、同意。
「意識高い系?」とか「マウント取られた。」とか言ってるヤツは、
お前が低能だからだろ、アホをカミングアウトされても困るんだわ、って感じ。 SREGの全体割り込みを禁止してあって
いくつかフラグが貯まってるときに
全体の割り込み許可を出すと実行される順番ってデータシートに載って無い?
割り込みベクター番号の一覧っていうのかな フルアセンブラとCのインラインアセンブラは似て非なる物だよ。
AVRを趣味として楽しみたい人にはフルアセンブラがお勧め。
フルアセンブラだとCPUとの間に薄い膜が存在しないので、生の感覚を楽しめるw
Cではタイムスライスも出来ないし、ADDI命令が無くてSUBI命令がある意味も分らないww 私はAVRを隅から隅まで熟知したいと考えているし、
AVRが持っている性能を限界まで追及したいと考えているので、
フルアセンブラで作っている。 (以上は個人の感想です、反対意見は御自由にどうぞ) >811
一部の新しいCPUを除き、テーブルの若い番号から順に実行されるのでは?
割り込みベクター番号の一覧は資料に掲載されているよ。 優れたプログラマは
Cでもパフォーマンスが出るように記述する
アセンブラを使うとしてもごく一部 君らどうなったらもめ事やめるん?
面倒いからお互いゴメンナサイして仲直りしな。 ベクタの完全な一覧は32頁の「割り込み」 で示されます。
この一覧は各種割り込みの優先順位も決めます。
下位側アドレスがより高い優先順位です。
リセットが最高優先順位で、
次が外部割り込み要求0(INT0)です。
と書いてある、原文(英文)は確認してない 書いてスッキリするならいいんじゃないの
聞いてくれる人も誰にも褒めてもらえないんだから
おれはお年寄りの話聞くようにしてる、寂しいもんね このフルアセ爺さんまた沸いてたのか。昼間からよほど暇なんだな。
何の役にも立たん個人の感想も相変わらずで元気そうだ。 昨夜のUDREベクターの人の話が半日で流されとるw 6800とか6502をフルアセで触ってドヤッしてた世代なんやろな
直交性(笑) ファミコンみたいな低スペ機でマリオカーとみたいな3D世界を表現する原理はわからない その質問が何故AVRスレなのか(笑)
因みにスーファミの話ならば、スプライトと拡大縮小のキーワードでググるんやで
スーファミの頃はまだ擬似3Dやし
ちゃんとポリゴン計算した3DはN64以降やな ID:IatDFWpP ID:5CIPvHcX
このスレチのアホどもはなんなんだ >>831
そのノスタルジックなスーファミをAVR使って再現しましたってところまでもっていくんじゃね?
まさか関係ない話をAVR絡めないままひっぱったりせんだろ。
まさかなぁ・・・
そんな馬鹿はいないと信じてるよ。 >>829
その疑似3Dの仕組みが分からん。
どうやって遠近法を表現してるの?
画像切り出して変形? tinyAVR使ってる人あんまりいないのね
このクラスの石だとPICが多いのかな 両方とも使ったみたが
C だけ、 or Asm だけ、で使うなら大差無い(変体Archとか言われるが、実際使ってみるとそれほどでもない)
C & Asm で使うなら、 PICは駄目だね
そもそも呼び出し規約の説明すら殆ど書いて無いし(使って欲しくないという事なんだろうが)
コンパイラが吐き出すコードもまともじゃない(動かないコードを吐いたりする)
元がスタックに変数積めないArchだから、深く突き詰めてもしょうがないが・・・
I/OはPICの方洗練されてる
今手元にあるAVRは 32u4, tiny85 で、 最後に買ったのがコレ
これ以降、下位クラス(8-bit)は、PICに変えた。 >>837
何をもって“いないのね”と結論付けてるんだ? PICはって結局16F84Aあたりを指してるのかな?
最近のPICは8ビットでもスタックに変数を積めるんだけどね。 >>839
>両方とも使ったみたが
>C だけ、 or Asm だけ、で使うなら大差無い
イヤァ、久しぶりにイスからズリ落ちそうになるほど驚いた。
私は両方をフルアセンブラで組んでみて、その大きな差に驚きあきれて、
2度とPICなんか使うかと固く決心したのに、こういう人も居るんだ、う〜む。
世の中、ホントに「蓼食う虫も好き好き」だな。
まぁ16ビットPICなら一度は使って見たい気がするが、エラッタが多いそうだし・・・ >まぁ16ビットPICなら一度は使って見たい気がするが、
使ったこと無いのか…。
>2度とPICなんか使うかと固く決心したのに、
でも決心したのか…。
馬鹿っぽいな。
正しい決心
2度とPIC16F1より古いPICなんか使うか >>843
おいおい、勝手に順番変えないでくれよw
2度と使うかと決心した後で16ビットPICが発売されたんだぞ。
でも16ビットPICもあまり良い評判を聞かないのが残念だ。
8ビットPIC使うにしても、スタック領域をユーザーが自由に確保出来るものでないと使う気がしない。
なぜなら私こそは、天上天下唯我独尊、知る人ぞ知る、知らない人は誰も知らないw
「タイムスライス・マン」なのだ! チャンチャン
さて、そろそろ死んだ真似でも始めるか・・・ 色々と御不満もございましょうがw
趣味のAVRはメチャ楽しい。
ハード作業(基板の配線など)が終ってプログラミングを始めるときは、
特に新しい周辺機器やデバイスを使うときは、
なんかもうワクワクして、早くPCの前に座りたい。
止められまへんな。 俺も趣味のAVRは楽しいと思う。
CPU自体の機能はそんなに無いけど、情報の多さ、値段の安さ、手軽さなんかも魅力的。
仕事ではSPARCだけど、高機能でなんでもできちゃう反面、お利口すぎてつまらないです。
人それぞれ、感じ方、やりたい事、スキル、予算なんかも色々とあるとは思うし、拘りもあると思うんで、好きなCPUを好きに使い倒したいなぁと。 情報の多さって...
データシートがちゃんとしてれば他に不要では?
特にAVRみたいな低機能マイコンでは ■ このスレッドは過去ログ倉庫に格納されています