AVRマイコン総合スレ Part46

レス数が1000を超えています。これ以上書き込みはできません。
0001774ワット発電中さん2022/03/27(日) 03:24:57.51ID:JSxfRZmF
個人でも手軽に使える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マイコン総合スレ Part45
https://rio2016.5ch.net/test/read.cgi/denki/1635669872/

0952774ワット発電中さん2022/07/01(金) 21:35:34.31ID:Vu/9z4cE
>>948
例えばタイマの CMP0A と ADC変換完了割り込みしか使わないなら、その2つのベクタの間には別の処理を置くことができるでしょ。
それで数ワードの節約になるし、割り込みルーチンへの定型的な rjmp を省略できれば 2クロックの節約になるわけだけど、そういうコードかくなら隙間が何ワードあるか把握しないといけないでしょ。
この間は 13クロック周期の割り込み処理書いたけど、そういうタイトなコードを書くにはアドレスを隠蔽してられないし、そういうコードを書きたいからわざわざアセンブラを引っ張り出してくるんだよ。
別にタイトなコードじゃなくても、小さなテーブルとか小さなウェイト処理とか、隙間に押し込めるものはいろいろあるよ。

0953774ワット発電中さん2022/07/01(金) 23:40:36.92ID:4IEPQIp8
>>952
そういうこそ普通は定義済みマクロを使うでしょ?
なんか、頭に血が上ってキャラの使い分けが変になってますよ?

0954774ワット発電中さん2022/07/02(土) 00:06:34.14ID:XHMG2hC0
>>953
そういうこそってどういうことだ??
たとえばさ、OC0Aaddr と ADCCaddr の間に何ワード詰め込めるか、定義値を見ないでどうやって知るの?
基本的の定義を使うと言うことは、その中身は「知らない体」にするものだろ?
アドレスの差どころか代償にすら依存するコードの書き方はできなくなるんだぞ?

0955774ワット発電中さん2022/07/02(土) 00:08:32.78ID:XHMG2hC0
>>954
いろいろtypoがひどい

そういうことこそ
基本的に定義を使うということは
アドレスの差どころか大小にすら

読み替えてくれ

0956774ワット発電中さん2022/07/02(土) 00:11:18.43ID:tLnpJ50Z
>>954
え?本気で言ってるの!?
「まとも」な実施教育や研修を受けたことある?

0957774ワット発電中さん2022/07/02(土) 00:17:06.99ID:tktFCX1i
>>954
一度、プロが書くコードをじっくり読んでくれ
話しはそれからだw

間違っても個人ブログとかを参照してドヤすんなよwww

0958774ワット発電中さん2022/07/02(土) 01:04:30.71ID:myjbGyLK
>>957
プロの書くコードを見る機会はほとんどないだろ。しかもAVR•••

0959774ワット発電中さん2022/07/02(土) 01:21:57.97ID:+lYSYXa6
>>956
どう受け取っていただいていいんだけどさ、じゃあこのコードを org と定義マクロ使ってまともに書くとどうなる?
見ての通り、空きベクタに割り込み処理そのものを書いてる。
ベクタ番号6 が入り口な。

.ORG 0
rjmp RESET
reti ; 2 INT0addr

NEXT_TICK:
out TCCR0A, ARG ; 3 PCI0addr
mov PULSE_TIMER, TICK_WIDTH ; 4 ICP0addr
reti ; 5 OVF0addr

dec PULSE_TIMER ; 6 OC0Aaddr
breq NEXT_TICK ; 7 OC0Baddr
reti ; 8 ACIaddr
reti ; 9 WDTaddr
reti ; 10 VLMaddr
reti ; 11 ADCCaddr

0960774ワット発電中さん2022/07/02(土) 02:53:17.42ID:tLnpJ50Z
>>958
ひでぇw

0961774ワット発電中さん2022/07/02(土) 17:29:52.35ID:3PHPuk7e
いきなりレスが減ったな
一人何役か知らんけどauの回線使ってたか?

0962774ワット発電中さん2022/07/02(土) 17:31:44.85ID:gOIDUAjA
プロだから土日はお休みなんでしょ

0963774ワット発電中さん2022/07/02(土) 18:04:36.40ID:vfbWpDu6
きっかけの問題(プログラムが動かない)が解決したからね。
みんな、「なぁんだ、そんなことが原因か」、と力が抜けちゃったんじゃないか?
ベクタテーブルの大きさを間違えるなんて・・・とあきれただろうな。
その後の言い争いについては、当事者以外は誰も興味無いと思う。

0964774ワット発電中さん2022/07/02(土) 18:24:14.84ID:jd1wFhWG
ID:Vu/9z4cE だが >>953 あたりにはぜひずっと説明していた >>959 こういう時こその書き方を教えてもらいたかったけどね。

0965774ワット発電中さん2022/07/02(土) 23:15:42.86ID:tLnpJ50Z
>>965
.org 0
rjmp RESET
(bad_vectorの処理は省略)
.org INT1Addr
NEXT_TICK:
out TCCR0A, ARG
mov PULSE_TIMER, TICK_WIDTH
reti
.org OC0Addr
dec PULSE_TIMER
breq NEXT_TICK
reti
でいけるでしょ。推奨されてないけど
ベクターテーブル内にrjmp / reti以外のインストラクションを書くのは一般に
非推奨だよね。昔のリソースぎりぎりの時にはよくやった手だけど絶対に飛び
込まないようにコーディングする必要があるのと,使うチップを変えた時に
移植できなくなる可能性あるし

0966774ワット発電中さん2022/07/02(土) 23:34:32.49ID:m6UNrXIu
時代錯誤も甚だしいけど

趣味だから 以下(ry

0967774ワット発電中さん2022/07/02(土) 23:36:33.78ID:igGQxtZD
>>965
非推奨どころかBad Idea扱いだなAVR assembler
のチュートリアルだと…

わざわざ書くぐらいだから「ボク凄い事思いついたお!」
ってやる例が多いんだろうね

0968774ワット発電中さん2022/07/03(日) 00:23:06.55ID:xFFj6ZzS
なんか>>959がナチュラルにdisられてる気がする

0969774ワット発電中さん2022/07/03(日) 07:49:41.66ID:WD2ybBvB
そもそも
中の人がせっかく2ワード命令のスペースを用意してくれたんだから
べクタテーブルには素直にJMP命令を使えばいいんだよ
RJMP+NOPに比べれば見た目もきれいだし、入力文字数も少ないしw
+1クロックなんか気にしてもしょうがない、
それよりも他にもっと気にしなけれないけない事があるだろ?

0970774ワット発電中さん2022/07/03(日) 07:51:44.67ID:WD2ybBvB
自分のプログラミング能力とか
ぬぁ〜んちゃってw

0971774ワット発電中さん2022/07/03(日) 08:36:54.50ID:iApNGZUJ
>>965
それが成立するのは各アドレスを明確に把握してる場合だけだけど、わざわざそう書くとどんないいことがあるの?
目的を見失ってませんか?

0972774ワット発電中さん2022/07/03(日) 08:44:04.95ID:1iL669o8
>>969
reti の代わりは?

0973774ワット発電中さん2022/07/03(日) 08:58:25.41ID:iApNGZUJ
ところで、推薦ってだれの推薦?
英語難しくてわからんわ。
>In case the program never enables an interrupt source, the Interrupt Vectors will not be used and, consequently, regular program code can be placed at these locations.

0974774ワット発電中さん2022/07/03(日) 09:18:16.82ID:Gx9UYAXg
>>973
それ推奨でしょ?

0975774ワット発電中さん2022/07/03(日) 09:20:27.87ID:ZqGiyTti
>>974
非推薦らしいよ。
>>965,967 がああまで言うんだから間違いないはず。

0976774ワット発電中さん2022/07/03(日) 09:54:25.99ID:pL1j+27Y
In case the program never enables an interrupt source,
the Interrupt Vectors will not be used
and, consequently,
regular program code can be placed at these locations.

割り込み入力を使わない場合は、
割り込み割り込みベクターは使われません、
その結果として
通常のプログラムコードをここに配置できます。

この文章には推奨(できればやりなさい)か非推奨(やるべきではありません)かは書かれてなくて、
できるかどうかだけが書かれていると思う。

推奨=できればやりなさい、非推奨=やるべきではありません
とあえて書いたけれど、推奨、非推奨の意味や雰囲気の捉え方は人によって異なるかもしれない、
そこを先にすり合わせないと、推奨か非推奨かの議論は成立しない。

あと、公式ドキュメントも単一の思想のもとで書かれているとは限らない、
本当に非推奨の意図で書かれているものもあるかもしれない。(だとしたら、公式でも意見が
分かれるものの可能性があるわけだから、ユーザーからみればどっちでも良さそう。
あとは、所属組織のコーディングルールとかに従えばいいと思う。

0977774ワット発電中さん2022/07/03(日) 10:07:03.99ID:xpKZB1/y
>>976
うん、できると書いてあることをやるかやらないかはポリシー等の問題。
>>943 のような条件の中で >>965 のような結果に行き着くことについて、目的を見失ってると言ってるのな。
その上非推薦だからと言うから、その根拠を確認してるんだよ。
いいのよ、オレオレ縛りで非推薦だから非推薦なんだって回答でも。そしたらそうなのねって言うだけ。

0978774ワット発電中さん2022/07/03(日) 10:13:59.00ID:szOgNocn
割り込み使う替わりに直接コード書けってことだろ

0979774ワット発電中さん2022/07/03(日) 10:31:27.00ID:1iL669o8
使わない領域はただの空き領域だですな

0980774ワット発電中さん2022/07/03(日) 12:26:19.26ID:JgU2DX6y
tiny202 で足りなきゃ204使えばいいだけじゃん。
あほくさ

0981774ワット発電中さん2022/07/03(日) 12:29:08.23ID:eRHFxuGy
>>980
誰もピン数の話なんてしてないだろ。
あほくさ

0982774ワット発電中さん2022/07/03(日) 13:13:48.09ID:iu5KiM+f
たった300ワード5ピンの用途に1616使ってすいません!

0983774ワット発電中さん2022/07/03(日) 15:05:43.86ID:JgU2DX6y
×204 ●402

0984774ワット発電中さん2022/07/03(日) 16:29:07.32ID:Otz15zan
>>972
RETI命令があるところ(割込み処理の終わりとか)にジャンプさせる。
 JMP reset_start
 JMP int_ret
 JMP int_ret
 ・・・
 JMP int_ret
int_ret:
 RETI
reset_start:

0985774ワット発電中さん2022/07/03(日) 16:47:02.66ID:Otz15zan
遊びならともかく(>>491
通常のプロフラムでベクタ領域に実行命令なんか置きたくないな。
やはりベクタテーブルは見た目が整然としてないと気持ち悪いw

0986774ワット発電中さん2022/07/03(日) 16:56:32.04ID:xIKcR9sc
>>985
だから最初から遊びだって
もう そっとしておいた方がいいよ

0987774ワット発電中さん2022/07/03(日) 17:42:58.31ID:EcVQSq6g
>>984
avrgccはコンパイル後のリスト見ると使ってない割り込みは
rjmp __bad_interrupt
で埋められて、行き先で
__bad_interrupt:
rjmp RESET
なってる。retiせずに最初に戻る。
どっちがいいんだろう?

0988774ワット発電中さん2022/07/03(日) 19:05:07.13ID:nJGI2bIp
>>987
RESET にジャンプしたところできれいに初期状態に戻せるかな。

0989774ワット発電中さん2022/07/03(日) 20:18:54.72ID:1iL669o8
>>988
リセットにジャンプしても、スタックがほったらかしだから、最初にスタックポインタの設定を書いて置けばいいんでない?
あと、電源オン時のデフォルト値を期待しないように書いておく

0990774ワット発電中さん2022/07/03(日) 21:11:38.59ID:9wPE4ZSh
>>989
意図しないベクタに割り込みが来てるようなレジスタの状態になってるわけで、元々初期化が怪しいよねぇ
ソフトウェアリセットかけられりゃいいけど、それができないモデルなら出力ピンひとつ潰してRESETピンに繋いどけばいいのかな。
と書いたところで思い付いたが、RESETピンを出力に切り替えて L にするコードでハードウェアリセットがかけられるかな?

0991774ワット発電中さん2022/07/03(日) 21:15:14.03ID:1iL669o8
>>990
開発中ならそうでしょうね
完成後なら、おそらくハード異常だから、haltさせちゃってもいいような気がする
ってHALT無いんか

0992774ワット発電中さん2022/07/03(日) 21:28:07.21ID:BagT7/Tx
ブラックボックスのライブラリ使って132MHzデュアルコアでガンガン回す時代になにやってるの?

0993774ワット発電中さん2022/07/03(日) 21:31:23.59ID:lYQUJ4u9
>>991
sleep だな

0994774ワット発電中さん2022/07/03(日) 22:51:21.79ID:xFFj6ZzS
>>990
WDT使えばリセットかけられるでしょ

0995774ワット発電中さん2022/07/03(日) 23:15:26.75ID:1iL669o8
>>994
リセットかけても、どうせぶっ壊れてんだから意味なくね?って話

0996774ワット発電中さん2022/07/03(日) 23:28:25.49ID:akt32fKC
>>995
リセット後にリセット理由で対処すれば???

0997774ワット発電中さん2022/07/03(日) 23:33:05.97ID:xFFj6ZzS
>>995
「ソフトで(真の)リセットがかけられるか?」
に対するレスなんだが?

0998774ワット発電中さん2022/07/03(日) 23:33:07.25ID:eRHFxuGy
ブレークポイント張っとけ

0999774ワット発電中さん2022/07/03(日) 23:40:25.87ID:eRHFxuGy
>>997
Reset Flag 以外に何か残るっけ?

1000774ワット発電中さん2022/07/03(日) 23:59:52.11ID:pL1j+27Y
静電気などによる偶発的な暴走もありうるので、からなずしも
変なアドレスにアクセスしたから、システムが永続的に壊れていると考える必要はないですね。

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 20時間 34分 55秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。