>>937 ウチでは割り算ルーチンをコールするんだが
>>937 の環境ではどううまくやってくれるの?
>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ではこういう変形はしない。
>>924 C言語の仕様で、どちらから式が評価されるかは決まっているよ。
右からか、左からかは忘れた。
>>926 出てきて恥をかいちゃったねw
ごめん、コンパイラオプション間違えていました
-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とやり方は同じ
>>891 > x / 10 がネック
>>907 >ちなみに、AVR は 8bit 16MHz
ってあるから、試す石は8bitCPUで統一して、
avr-gccがdiv使ったら駄目とした方が良いと思いますけど。
話は変わるが、ATtiny1634発注してみた。UART2chあるしADCあるしで、2313A/4313よりヨサげかも
945 :
910: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
>>926 >>930 のコンパイラで行ける派は、下記の要求仕様満たせるコード示してから主張して欲しい。
・x * 0.6
・x は整数で、大体 500 〜 14000 くらいの範囲
・10クロック以内に出来たらすばらしいけど、難しいよね
・誤差 0.5% 以内なら許容範囲
>>946に以下を追加、
・AVR は 8bit 16MHz
テーブルを作っておく。
y=m[x];
#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するのが不思議(無駄ではない)
>>950 何だかすごいですね。
EEPROMの状態を確認せずに読み出しですか。
それ本当に動くと思いますか?
>>952 おっ勘違いした。EEPROMじゃなかった。間違ったことを書いてしまった。m(_._)m
テーブルアドレスの下位8ビットをゼロにしとけばあと1ck削れる
>>950 r24.r25に500~14000をセットして実行すると
Flash-ROMのテーブルから0.6倍した値300~8400(012C~20D0)を拾ってきて
r24.r25に格納するって方法ですか?
すみません、もう一つ、
「-mをsubするのが不思議(無駄ではない)」
の意味がよく分からないのですが。
10年くらい前、AT90S1200に簡単なプログラムを書き込んだことがあります。
ATTINT2313-20を使ってみたいと思おもっていますが、同じライターで、書き込むことができますか?
どのライターかわからないとなんとも言えないだろ
ホントにここは悲しくなるほどレベルが低いな
AVRが可哀想だ
書き込んでみてダメなら、ライター買い直せばいいんでね?
Tiny2313にS1200と同じ内容を書き込むオチとかありそう
自作ライターです。
お騒がせしました。
963 :
774ワット発電中さん:2013/03/10(日) 18:43:53.31 ID:ssuGH1tg
まだ書けないかな?
自作なら作った本人にしかわからないんじゃないか?
こっちはなんの情報もないからなんとも言えんぞ
このスレすげーな
>>966 ありがと
PIC16F84に書き込みプログラムを書き込み、エクセルのVBAからシリアルでHEXファイルを送るオリジナルのライターです。
書き込みのスペックとかタイミングとかそのまま使えるのかなと思って。
ATtiny2313のデータシートよく読んでみます。
このスレの結論
そういった計算が必要なら、FPUつきのマイコン使え
Cの丸め仕様はおバカだから気をつけないとトンでもないコードを吐く
970 :
774ワット発電中さん:2013/03/11(月) 03:13:18.38 ID:uWlgoTtC
>>968 思い込みの激しいやつだな
脳の病気でも患ってるのか?
>>970 大方、「俺が世界の中心だ」野郎なんだろ?
Cの仕様も知らず、思い通りにならなければ全部ツールのせいw
春だなw
春ですよ
何か不具合が見つかると「これはCの仕様です」とか、涼しい顔をしてる間抜け。
趣味なら良いが、信頼性の低いソフトしか組めずに会社の足を引っ張るだけw
「仕様」で思い出した。
以前、某有名メーカーのソフトにデバイスの初期設定関連の不具合を発見した。
俺も同じデバイスを使って同じミスをした経験があったので
(デバイスのマニュアルが分かりにくて勘違いしやすい)
親切心から電話して、
「XXという症状のバグがあります、原因はYYで、ZZとすれば解決します」
と言ったら
「バグではありません、仕様です。そのように作られています」
という予想もしない開き直りの返事にビックリした。
3ヶ月ほどして送られてきたバージョンアップ版では
俺が指摘したバグもチャント修正されていた。
>>976 2chで指摘して中の人煽ってやれば良かったのに
どうせここ見るんだろうし
>>976 普通じゃん。
誰が謝るもんかwって話だ。
そうじゃないと訴訟になった時賠償させられるからだ。
インチキ臭いのが当たり前のビジネスと、
純粋に技術的問題は違う。
事後で書き込むぐらいなら、
黙って2chとかツイッタで公表してメンツ潰してやればよかった。
あの会社はロクに手間かけてませんよwって話にしてやればよかったね。
プログラマなら理解してもらえると思うが、
「デバッグ作業、一生懸命頑張ったのですが、心ならずもバグが残ってしまいました」
というのがプログラミングだと思う。
だから、「分かりました、後で調べてみます」程度の返事で十分だったのだが、
予想外の返事だったので少し驚いただけです。
俺は担当者に謝って欲しいなんて思ってなかったし、
相手のメンツを潰す気にも、ネットで騒ぎ立てる気もなかった。
もしも、俺が作ったソフトに関して、客がバグ有りを教えてくれたら嬉しい。
さらにバグが発生する条件、そのデバッグ方法まで指摘してくれたら、
感謝状を出したい位の気持ちになると思う。
でも甘いんだろうな、場合によっては訴えられたりするかもしれないね。
この時の相手も一部上場の企業だったので、
賠償の事を考えたらバグを認めるわけにはいかなかったのだろうな。
(長文ゴメンヨ、これで終わりにする)
>>976の場合は旧版残しておけばバグが再現するから
裁判になれば嘘ついて仕様と言い張った方が不利になると思うが
しかもマニュアルに書いてある不具合そのまんまなんでしょ?
デバイスメーカー読んで証言させれば仕様で片付けるのは不可能だろうに
○デバイスメーカー呼んで裁判で証言させれば
×デバイスメーカー読んで証言させれば
>>981 必ず再現するなら「仕様です」で裁判で不利になることは無いよ
> (デバイスのマニュアルが分かりにくて勘違いしやすい)
正しい解釈と「勘違い」を説明できれば裁判で勝つじゃん
「勘違い」が仕様ですってのは技術者の理解不足だぞ?
どんな表現なのかによるから、
>>976だけでは何とも言えんが。
>>980 心情的には理解するよ。
ある事無いことで人を貶めてがんじがらめにする責任(重責)システムの弊害が
強い企業が多い限り日本製の商業ソフトのハッテンは期待できない。
不具合と称するデバイスの初期化はどんな物ですか?
例えばモーターコントローラーチップで設定したパラメーターを読み出す事が出来ないとかだとした場合に、それを使ったドライバユニット説明書に設定値を、読み出す事は出来ませんと書かれていたらそれは仕様で使用にも支障ないでしょ。
初期化時にプロテクション解除とかの設定を追加してやると読めるとかで、
次のバージョンで読めるようになったとしても些細なことだ
昔のデバイスでありがちなのは、
例えばステータスレジスタのBUSYビットを見て、セットされていなければ
(次の)コマンドが書けるといった仕様にも関わらず、最初のコマンドを
書いてBUSYビットがセットされるまでの時間が明記されていなかったり、
コマンドによってばらつきがあって、早いマイコンでコマンドを書いた
直後にすぐステータスレジスタを読むと、まだBUSYがセットされていな
くて、レディ状態と誤って判定して、次のコマンドをレジスタに上書き
してしまうとか。
あと、初期化コマンド(周辺ICの内部リセット)を書いて、デバイスがレディ
状態になるまで一定時間が掛かるのに、BUSY/READYステータスが読み出せ
ない「仕様」とか。
xmega触ってて気づいた仕様
命令一覧ではRETI命令はステータスレジスタのIフラグをセットするとされている。
実はこれは間違いで、割り込みコントローラでの禁止状態を解除するが、
ステータスレジスタはなんら変わらない。
mega用のタスクスイッチャ移植しててハマったw
しかしDragonのワンステップ実行ではIフラグが変わるんで厄介なんだよな。
デバッガがバグってるなんて・・・
ATMELに報告したいけど英語でレポート送るなんて出来ねぇ!