AVRマイコン総合スレ Part27

このエントリーをはてなブックマークに追加
939774ワット発電中さん:2013/03/08(金) 15:01:12.91 ID:+0So0Sex
>>937
ウチでは割り算ルーチンをコールするんだが >>937 の環境ではどううまくやってくれるの?
940774ワット発電中さん:2013/03/08(金) 15:01:53.76 ID:UgT1hYz4
>937
対象アーキは何よ? ARMと言うだけで何かを指定した気になってるのが…
第一 "-o0" てなんだ。-O3 でも割算なんか呼ばん。

arm-*-gcc -S -O3 -mcpu=cortex-m3 -mthumb

movw r3, #26215
movt r3, 26214
add r0, r0, r0, lsl #1
smull r2, r0, r3, r0
ubfx r0, r0, #1, #16
bx lr

arm-*-gcc -S -O3 -mcpu=arm7tdmi

ldr r3, .L2
add r0, r0, r0, asl #1
smull r2, r0, r3, r0
mov r0, r0, asl #15
mov r0, r0, lsr #16
bx lr
.L2:
.word 1717986919

両者とも *3*1717986919/2^33 という計算。

なお、乗算はあっても割算がないものがほとんどのARMでは割算の乗算化が昔から良く利くが
乗算すらないものが多かったAVRではこういう変形はしない。
941774ワット発電中さん:2013/03/08(金) 15:22:12.17 ID:XHrgAAWN
>>924
C言語の仕様で、どちらから式が評価されるかは決まっているよ。
右からか、左からかは忘れた。

>>926
出てきて恥をかいちゃったねw
942774ワット発電中さん:2013/03/08(金) 16:51:13.99 ID:yn3WY0r8
ごめん、コンパイラオプション間違えていました
-O3のつもりで-Osにしていました。
-Osの時は割り算ルーチンをコールするのね。
SMT32F1003用のARM M3
----
-Osオプション
----
stmfdsp!, {r3, lr}
movr3, #6
mulr0, r3, r0
movr1, #10
bl__aeabi_idiv
movr0, r0, asl #16
movr0, r0, lsr #16
ldmfdsp!, {r3, lr}
bxlr
---
-O3
---
ldrr3, .L2
addr0, r0, r0, asl #1
movr0, r0, asl #1
smullr2, r0, r3, r0
movr0, r0, asl #14
movr0, r0, lsr #16
bxlr
.L3:
.align2
.L2:
.word1717986919
-------
-o0オプション
------
スタックの扱いとか変数の扱いが違うだけで-O3とやり方は同じ
943774ワット発電中さん:2013/03/08(金) 17:18:50.74 ID:/X2KtDl+
>>891
> x / 10 がネック

>>907
>ちなみに、AVR は 8bit 16MHz

ってあるから、試す石は8bitCPUで統一して、
avr-gccがdiv使ったら駄目とした方が良いと思いますけど。
944774ワット発電中さん:2013/03/08(金) 20:15:53.31 ID:h7XzKRYc
話は変わるが、ATtiny1634発注してみた。UART2chあるしADCあるしで、2313A/4313よりヨサげかも
945910:2013/03/08(金) 20:21:49.63 ID:2S4QpKLB
上位バイト下位バイトが逆だったようなので修正

入力 r3:r2
出力 r5:r4
破壊 r0, r1, r16

ldi r16, 154
mul r2, r16
mov r4, r1
eor r5, r5
mul r3, r16
add r4, r0
adc r5, r1
946774ワット発電中さん:2013/03/08(金) 20:28:41.41 ID:2S4QpKLB
>>926 >>930 のコンパイラで行ける派は、下記の要求仕様満たせるコード示してから主張して欲しい。

・x * 0.6
・x は整数で、大体 500 〜 14000 くらいの範囲
・10クロック以内に出来たらすばらしいけど、難しいよね
・誤差 0.5% 以内なら許容範囲
947774ワット発電中さん:2013/03/08(金) 20:49:58.43 ID:/X2KtDl+
>>946に以下を追加、
・AVR は 8bit 16MHz
948774ワット発電中さん:2013/03/08(金) 21:38:18.30 ID:ABqUa7A3
16bit*77/128なら21ck
((((((A>>2)+A)>>1)+A)>>3)+A)>>1
949774ワット発電中さん:2013/03/09(土) 20:18:56.04 ID:JWVE10g1
テーブルを作っておく。
y=m[x];
950774ワット発電中さん:2013/03/09(土) 20:48:11.61 ID:OiS2N27T
#include <avr/pgmspace.h>
unsigned bar(unsigned x)
{
extern const unsigned m[];
return pgm_read_word(&m[x]);
}

↑を avr-gcc -mmcu=atmega32 -O2 -S bar.c してみた↓

bar:
movw r30,r24
lsl r30
rol r31
subi r30,lo8(-(m))
sbci r31,hi8(-(m))
lpm r24, Z+
lpm r25, Z
ret

-mをsubするのが不思議(無駄ではない)
951774ワット発電中さん:2013/03/09(土) 20:49:26.58 ID:XxovBWm2
952774ワット発電中さん:2013/03/09(土) 21:10:04.37 ID:6sbJ0zxm
>>950

何だかすごいですね。
EEPROMの状態を確認せずに読み出しですか。
それ本当に動くと思いますか?
953774ワット発電中さん:2013/03/09(土) 21:12:37.65 ID:6sbJ0zxm
>>952

おっ勘違いした。EEPROMじゃなかった。間違ったことを書いてしまった。m(_._)m
954774ワット発電中さん:2013/03/09(土) 21:15:16.74 ID:5mFuRT1p
テーブルアドレスの下位8ビットをゼロにしとけばあと1ck削れる
955774ワット発電中さん:2013/03/09(土) 21:57:29.92 ID:CeMmybV5
>>950
r24.r25に500~14000をセットして実行すると
Flash-ROMのテーブルから0.6倍した値300~8400(012C~20D0)を拾ってきて
r24.r25に格納するって方法ですか?
956774ワット発電中さん:2013/03/09(土) 22:05:56.64 ID:CeMmybV5
すみません、もう一つ、
「-mをsubするのが不思議(無駄ではない)」
の意味がよく分からないのですが。
957774ワット発電中さん:2013/03/10(日) 00:23:42.16 ID:ssLM3XYs
10年くらい前、AT90S1200に簡単なプログラムを書き込んだことがあります。
ATTINT2313-20を使ってみたいと思おもっていますが、同じライターで、書き込むことができますか?
958774ワット発電中さん:2013/03/10(日) 00:34:45.13 ID:5NGPEzp2
どのライターかわからないとなんとも言えないだろ
959774ワット発電中さん:2013/03/10(日) 13:41:19.30 ID:IYdhfaPE
ホントにここは悲しくなるほどレベルが低いな
AVRが可哀想だ
960774ワット発電中さん:2013/03/10(日) 14:07:56.35 ID:KQa69Axt
書き込んでみてダメなら、ライター買い直せばいいんでね?
961774ワット発電中さん:2013/03/10(日) 14:58:37.75 ID:EryQfKBj
Tiny2313にS1200と同じ内容を書き込むオチとかありそう
962774ワット発電中さん:2013/03/10(日) 17:53:10.45 ID:ssLM3XYs
自作ライターです。
お騒がせしました。
963774ワット発電中さん:2013/03/10(日) 18:43:53.31 ID:ssuGH1tg
まだ書けないかな?
964774ワット発電中さん:2013/03/10(日) 20:07:12.04 ID:GgM4d/J/
自作なら作った本人にしかわからないんじゃないか?
こっちはなんの情報もないからなんとも言えんぞ
965774ワット発電中さん:2013/03/10(日) 21:09:26.76 ID:HGoqfYQY
このスレすげーな
966774ワット発電中さん:2013/03/10(日) 22:39:33.75 ID:Zd1EJWqr
>>957
自作なら以下を参照の事、オリジナルのライターなら
ブログか何かで公開してネタにしてほしいw

AVR093 :ATtiny2313によるAT90S1200置換
avr.jpに和訳がある。

AVR093: Migrating from AT90S1200 to ATtiny2313
http://www.atmel.com/Images/doc4299.pdf

Documents for ATtiny2313
http://www.atmel.com/devices/ATTINY2313.aspx?tab=documents
967774ワット発電中さん:2013/03/10(日) 23:19:14.63 ID:ssLM3XYs
>>966
ありがと
PIC16F84に書き込みプログラムを書き込み、エクセルのVBAからシリアルでHEXファイルを送るオリジナルのライターです。
書き込みのスペックとかタイミングとかそのまま使えるのかなと思って。
ATtiny2313のデータシートよく読んでみます。
968774ワット発電中さん:2013/03/11(月) 00:50:22.33 ID:uRKJ+Tvn
このスレの結論
そういった計算が必要なら、FPUつきのマイコン使え
969774ワット発電中さん:2013/03/11(月) 01:34:39.37 ID:7hKMg2df
Cの丸め仕様はおバカだから気をつけないとトンでもないコードを吐く
970774ワット発電中さん:2013/03/11(月) 03:13:18.38 ID:uWlgoTtC
>>968
思い込みの激しいやつだな
脳の病気でも患ってるのか?
971774ワット発電中さん:2013/03/11(月) 08:38:28.10 ID:lVnqf4bQ
>>970
大方、「俺が世界の中心だ」野郎なんだろ?
Cの仕様も知らず、思い通りにならなければ全部ツールのせいw
972774ワット発電中さん:2013/03/11(月) 10:12:18.89 ID:mlz4etik
>>968 = >>971
てすか。
973774ワット発電中さん:2013/03/11(月) 12:44:49.48 ID:3Vz6TJcz
春だなw
974774ワット発電中さん:2013/03/11(月) 14:07:51.38 ID:CuN0Nwgs
春ですよ
975774ワット発電中さん:2013/03/11(月) 22:23:17.45 ID:4Bmr7woL
何か不具合が見つかると「これはCの仕様です」とか、涼しい顔をしてる間抜け。
趣味なら良いが、信頼性の低いソフトしか組めずに会社の足を引っ張るだけw
976774ワット発電中さん:2013/03/12(火) 08:06:00.17 ID:wrqTFr8M
「仕様」で思い出した。

以前、某有名メーカーのソフトにデバイスの初期設定関連の不具合を発見した。
俺も同じデバイスを使って同じミスをした経験があったので
(デバイスのマニュアルが分かりにくて勘違いしやすい)

親切心から電話して、
「XXという症状のバグがあります、原因はYYで、ZZとすれば解決します」
と言ったら
「バグではありません、仕様です。そのように作られています」
という予想もしない開き直りの返事にビックリした。

3ヶ月ほどして送られてきたバージョンアップ版では
俺が指摘したバグもチャント修正されていた。
977774ワット発電中さん:2013/03/12(火) 12:51:05.02 ID:xjgNoEp+
>>976
2chで指摘して中の人煽ってやれば良かったのに
どうせここ見るんだろうし
978774ワット発電中さん:2013/03/12(火) 12:55:37.64 ID:k3EjWRRA
>>976=某有名メーカーの中の人
979774ワット発電中さん:2013/03/12(火) 13:57:00.22 ID:l/az6n1h
>>976
普通じゃん。
誰が謝るもんかwって話だ。

そうじゃないと訴訟になった時賠償させられるからだ。
インチキ臭いのが当たり前のビジネスと、
純粋に技術的問題は違う。

事後で書き込むぐらいなら、
黙って2chとかツイッタで公表してメンツ潰してやればよかった。

あの会社はロクに手間かけてませんよwって話にしてやればよかったね。
980774ワット発電中さん:2013/03/12(火) 15:25:51.70 ID:wrqTFr8M
プログラマなら理解してもらえると思うが、
「デバッグ作業、一生懸命頑張ったのですが、心ならずもバグが残ってしまいました」
というのがプログラミングだと思う。

だから、「分かりました、後で調べてみます」程度の返事で十分だったのだが、
予想外の返事だったので少し驚いただけです。
俺は担当者に謝って欲しいなんて思ってなかったし、
相手のメンツを潰す気にも、ネットで騒ぎ立てる気もなかった。

もしも、俺が作ったソフトに関して、客がバグ有りを教えてくれたら嬉しい。
さらにバグが発生する条件、そのデバッグ方法まで指摘してくれたら、
感謝状を出したい位の気持ちになると思う。

でも甘いんだろうな、場合によっては訴えられたりするかもしれないね。
この時の相手も一部上場の企業だったので、
賠償の事を考えたらバグを認めるわけにはいかなかったのだろうな。
(長文ゴメンヨ、これで終わりにする)
981774ワット発電中さん:2013/03/12(火) 17:42:48.61 ID:xjgNoEp+
>>976の場合は旧版残しておけばバグが再現するから
裁判になれば嘘ついて仕様と言い張った方が不利になると思うが
しかもマニュアルに書いてある不具合そのまんまなんでしょ?
デバイスメーカー読んで証言させれば仕様で片付けるのは不可能だろうに
982774ワット発電中さん:2013/03/12(火) 17:43:17.40 ID:xjgNoEp+
○デバイスメーカー呼んで裁判で証言させれば
×デバイスメーカー読んで証言させれば
983774ワット発電中さん:2013/03/12(火) 19:03:20.25 ID:mUF70xZV
>>981
必ず再現するなら「仕様です」で裁判で不利になることは無いよ
984774ワット発電中さん:2013/03/12(火) 19:06:58.78 ID:xjgNoEp+
> (デバイスのマニュアルが分かりにくて勘違いしやすい)
正しい解釈と「勘違い」を説明できれば裁判で勝つじゃん
「勘違い」が仕様ですってのは技術者の理解不足だぞ?
どんな表現なのかによるから、>>976だけでは何とも言えんが。
985774ワット発電中さん:2013/03/12(火) 20:06:42.95 ID:l/az6n1h
>>980
心情的には理解するよ。

ある事無いことで人を貶めてがんじがらめにする責任(重責)システムの弊害が
強い企業が多い限り日本製の商業ソフトのハッテンは期待できない。
986774ワット発電中さん:2013/03/12(火) 21:50:27.35 ID:9xyWp9OF
不具合と称するデバイスの初期化はどんな物ですか?
例えばモーターコントローラーチップで設定したパラメーターを読み出す事が出来ないとかだとした場合に、それを使ったドライバユニット説明書に設定値を、読み出す事は出来ませんと書かれていたらそれは仕様で使用にも支障ないでしょ。
初期化時にプロテクション解除とかの設定を追加してやると読めるとかで、
次のバージョンで読めるようになったとしても些細なことだ
987774ワット発電中さん:2013/03/13(水) 10:53:13.24 ID:M1iT5TqF
昔のデバイスでありがちなのは、

例えばステータスレジスタのBUSYビットを見て、セットされていなければ
(次の)コマンドが書けるといった仕様にも関わらず、最初のコマンドを
書いてBUSYビットがセットされるまでの時間が明記されていなかったり、
コマンドによってばらつきがあって、早いマイコンでコマンドを書いた
直後にすぐステータスレジスタを読むと、まだBUSYがセットされていな
くて、レディ状態と誤って判定して、次のコマンドをレジスタに上書き
してしまうとか。

あと、初期化コマンド(周辺ICの内部リセット)を書いて、デバイスがレディ
状態になるまで一定時間が掛かるのに、BUSY/READYステータスが読み出せ
ない「仕様」とか。
988774ワット発電中さん
xmega触ってて気づいた仕様

命令一覧ではRETI命令はステータスレジスタのIフラグをセットするとされている。
実はこれは間違いで、割り込みコントローラでの禁止状態を解除するが、
ステータスレジスタはなんら変わらない。
mega用のタスクスイッチャ移植しててハマったw

しかしDragonのワンステップ実行ではIフラグが変わるんで厄介なんだよな。
デバッガがバグってるなんて・・・
ATMELに報告したいけど英語でレポート送るなんて出来ねぇ!