AVRマイコン総合スレ ..
[2ch|▼Menu]
655:774ワット発電中さん
19/02/16 20:51:41.29 F4GluCmK.net
ATMEGA328P使っておもちゃを改造した。
犠牲になったのはプリキュアのハッピーメロディマイク
URLリンク(i.imgur.com)
プリキュアの音楽が流れない酷いやつ。
マイクに入るように小さく工作
URLリンク(i.imgur.com)
無事に収まった
URLリンク(i.imgur.com)
アニメの音楽が流れるようになった
URLリンク(i.imgur.com)

656:774ワット発電中さん
19/02/16 20:54:26.77 rFP3qrWF.net
>>636
送信完了ベクタが登録されていないので動作がおかしくなっているんじゃない?
送信割り込みを使わないような設定にすれば良いと思う
UCSR0B = (1<<RXCIE0) | (1<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);

UCSR0B = (1<<RXCIE0) | (0<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);
main()関数内に sei(); が無いけど、割り込み発生するの?

657:774ワット発電中さん
19/02/16 21:16:28.97 27MspbiO.net
>>638
> 送信割り込みを使わないような設定にすれば良いと思う
それ!ビンゴだった!
え?どゆこと?
”送信割り込み使う”に設定すると
ISR(USART_TX_vect)
{
}
送信側をきちんと定義してあげないと
ISR(USART_RX_vect)
{
}
受信側の挙動に影響が出るってこと?

sei()はごめん、コピペするの忘れた^^;)

658:774ワット発電中さん
19/02/16 21:31:46.11 rFP3qrWF.net
>>639
割り込みベクタテーブルの初期値は 0x0000 だったハズ(データシートを読んでみて下さい)
ISR(〜) を定義しないと割り込み発生時に 0x0000 にジャンプする
送信完了→送信完了割り込み発生→ベクタテーブルを参照して 0x0000 にジャンプ(見かけ上、リセット動作となる)
送信完了割り込みが必要無いのなら空の ISR(USART_TX_vect) {} を定義するよりも、送信完了割り込みを禁止したほうがコードサイズが小さくなるし余計な割り込みも発生しませんよ

659:774ワット発電中さん
19/02/16 21:57:23.03 rFP3qrWF.net
>>639
補足
>受信側の挙動に影響が出るってこと?
 ISR(USART_RX_vect) 内で送信処理しているでしょ
 送信処理が完了すれば ISR(USART_TX_vect) に飛ぼうとするので結果として 0x0000 にジャンプします

660:774ワット発電中さん
19/02/17 01:07:21.43 e3U5fsZq.net
>>640
そういうことなのね
UARTで一文字送信するたびにリセットボタンを押してたようなものか
どうりで変数が常に初期化されるわけ


661:セ こういう挙動ってちゃんとしっとかんとあかんね(´・ω・`)



662:774ワット発電中さん
19/02/17 14:23:35.19 OLsc/n62.net
>>640
横からだけど、なんか勉強になった。ありがとう

663:774ワット発電中さん
19/02/19 03:19:24.43 CpC/ZqnN.net
>>637
楽しそう!
お子さんの?

664:774ワット発電中さん
19/02/19 23:46:53.17 WmSSklev.net
ATMEGA328P使って環境モニターっぽいことやってる
常時起動してるのは電池の無駄だからスリープ使ってるんだけど
スリープ復帰後にI2Cセンサとの通信ができなくなることがある。
詳細に調べてみるとスリープモードが
・パワーダウン
・パワーセーブ
・スタンバイ
のときはスリープ復帰後にI2Cが使えない(通信途中でフリーズする)ことが分かった。
ただ唯一、一番省エネ効果が低い
・アイドル
に設定するとスリープ復帰後もI2Cは問題無く使える。
I2Cってディープスリープ状態から復帰後は使えなくなるんだっけ?

665:774ワット発電中さん
19/02/20 01:43:01.69 1DISpaXs.net
そんな話聞いたことないし、そうだとすれば大炎上してるよ。
ソース晒してみなよ。

666:774ワット発電中さん
19/02/20 01:46:45.55 1DISpaXs.net
もしかしてTWIの電力削減レジスタ弄って、なおかつウェークアップ後初期化してないとか?

667:774ワット発電中さん
19/02/20 15:36:29.97 Z8sZQfkV.net
あれ?再スタート出来るでしょ?

668:774ワット発電中さん
19/02/20 20:59:33.69 +tpxrGaP.net
>>646
全部掲載はさすがに足りないから無理だけど要所くらいなら・・・
ちなみにTWIの電力削減レジスタとか難しいことは一切やってないよ
やってることだけどRTC使って一定時間ごとにAVRに割り込み(INT0)かけて起動してデータセーブ。
セーブが終わったらスリープして待機。
具体的にはRTC使ってINT0ピンをLowに引っ張って割り込みをかけてやる。
RTCの仕様でそのままLowに引っ張り続けるからI2C経由でAVRからRTCに命令出してHighに戻すよう命令
(release_interruption関数)。
問題はこのI2C通信で発生するっぽい。パワーダウンスリープから目覚めた直後だとI2C通信の途中で応答不能になり
アイドルスリープから目覚めた直後だと問題無く動作する。スリープを一切使わない場合もむろん問題無く動作する。
↓ちなみに以下ソース

669:774ワット発電中さん
19/02/20 21:00:44.95 +tpxrGaP.net
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "FatFs/ff.h"
#include "FatFs/diskio.h"
volatile UINT Timer;
ISR(TIMER0_COMPA_vect)
{
Timer++;
disk_timerproc();
}
// 以上FatFsで必要なタイマー割り込み
volatile unsigned char int0_cnt;
ISR(INT0_vect)
{
int0_cnt--;
release_interruption(); // ←I2Cで通信しようとするこの関数で止まる
}
volatile char usart_recvData[256];
volatile unsigned char usart_recv_write;
ISR(USART_RX_vect)
{
char x = UDR0;
usart_recvData[++usart_recv_write] = x;
}
int main(void)
{
TIMSK0 = _BV(OCIE0A);
TCCR0A = _BV(WGM01);
TCCR0B = 0b101;
OCR0A = F_CPU / 1024 / 100 - 1;
EICRA = (0<<ISC01) | (0<<ISC00);
EIMSK = 1<<INT0;
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C = 0b00000110;
UBRR0L = 25;
UBRR0H = 0;
UCSR0B = (1<<RXCIE0) | (0<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
int0_cnt = 5;
while (1)
{
if ( int0_cnt == 0 )
{
int0_cnt = 5;
save_data();
}
sleep_mode();
}
}

670:774ワット発電中さん
19/02/21 00:09:21.04 40+hINCy.net
>>650
TWIで割り込み使ってたりして

671:774ワット発電中さん
19/02/21 00:17:18.89 1mBEjo2+.net
俺は小心者なので、
割り込みハンドラの中で通信ルーチンコールとか、
怖くて出来ない
スタック食い潰しの原因追求で泣きそう
になったこととかあるし…

672:774ワット発電中さん
19/02/21 00:33:13.05 40+hINCy.net
INT0割り込み→i2cでRTCにINT0ピンHIGH指示→割込処理から抜ける。でもこのときRTCはまだINT0ピンHIGHの処理完了してないので、またINT0割り込み入る。AVRはi2c始めようとするけどRTCは前の指示実行中なのでしらんぷり。

673:774ワット発電中さん
19/02/21 01:00:46.20 a31cyszz.net
>>INT0ピンHIGH指示
の後に割り込みをすぐに抜けずに、INT0ピンがHiになるのを待ってから抜ければOKってことか。

674:774ワット発電中さん
19/02/21 01:16:43.08 1mBEjo2+.net
ちょっと待て
EICRA = (0<<ISC01) | (0<<ISC00);
ってなんぞ?
これじゃ
EICRA=ISC01|ISC00
と同じだから、立ち上がりトリガにならんか?
(他もだけど…)

675:774ワット発電中さん
19/02/21 01:28:58.76 mfwbhZjO.net
>>655
ならない。無意味ではあるけど…
普通は
EICRA &= ~(_BV(ISC01) |_BV(ISC00) );
かな。
_BV() 使ったり、直接シフトしたり一貫性がないとは思う

676:774ワット発電中さん
19/02/21 12:18:33.68 vj4JZ5b7.net
いろんなとこからコピペしたとか?

677:774ワット発電中さん
19/02/21 16:56:23.11 +p1+Xh6O.net
>>656
ちょっと興味あったので・・・
DDRA = (0 << PA0) | (0 << PA1) ; は
out DDRA, zero
ふむふむ
DDRA |= (0 << PA0) | (0 << PA1) ; は
in tmp, DDRA
out DDRA, tmp
うーむ -Os オプション付けても刈取らないのね・・・
(atmel stuido 7)

678:774ワット発電中さん
19/02/21 18:57:34.89 dey808pv.net
意図して読み出した1を書き戻すことも有るからね。バグになっちゃう。

679:774ワット発電中さん
19/02/22 08:38:26.52 nzDShw1O.net
秋月の通販サイトみたらDIPのAVRマイコンATMEGA1284P−PUが売ってた。
750yen
AVRマイコンの未来は明るい。

680:774ワット発電中さん
19/02/22 09:38:49.50 ZNVWCvt4.net
来たかっ(ガタッ

681:774ワット発電中さん
19/02/22 14:13:08.11 cS9aGyWb.net
何年も前からあるが・・・

682:774ワット発電中さん
19/02/22 16:07:15.94 5qo4q1Lg.net
前からあるよね…

683:774ワット発電中さん
19/02/22 16:23:07.89 C8innWJq.net
>>660
URLリンク(akizukidenshi.com)
発売日 2011/01/04
128Kバイトもの巨大なプログラムメモリと、16Kバイトもの広大なSRAMを内蔵しています。
ちなみに
URLリンク(akizukidenshi.com)
発売日 2019/02/22
プログラムメモリ:256KB RAM:28KB

684:774ワット発電中さん
19/02/22 17:37:09.47 2ytdRX31.net
>>664
DIPだからクソデカくて面白いって話なのにSMD貼られても……

685:774ワット発電中さん
19/02/22 17:50:52.72 4EQI3SDG.net
>DIPだからクソデカくて面白いって話
それどこに書いてる?

686:774ワット発電中さん
19/02/22 17:52:09.83 Np8CmBaC.net
>>665の脳内、しかも17:37:05頃のこと。

687:774ワット発電中さん
19/02/22 18:44:50.96 MEC1rnMB.net
フラッシュを10,000回書き換えて
書き込み不能にした強者っているのかな

688:774ワット発電中さん
19/02/22 18:59:14.43 iTZfS6ry.net
>>668
どこかで実験したブログか何かをみた

689:774ワット発電中さん
19/02/22 19:45:24.66 es8BCpBs.net
>>669
オレもどっかで見た。だけどフラッシュではなくEEPROM(PICの)

690:774ワット発電中さん
19/02/22 22:21:50.35 4RXsUzoZ.net
>>670
URLリンク(madlabo.oops.jp)
ここのオッチャン、リレー式計算機とか作ったり色々とやってるな
しかし電子工作者のこの文体のテンション、ついていけない…

691:774ワット発電中さん
19/02/22 23:01:51.46 ePdxNrEt.net
>>664
CAN入りAVRが700円か

692:774ワット発電中さん
19/02/22 23:14:43.02 moB5Fynl.net
>>672
罐パッケージのAVRがあるのかと思ったw

693:774ワット発電中さん
19/02/22 23:35:36.28 5BJLG1gH.net
> フラッシュを10,000回書き換えて
> 書き込み不能にした強者っているのかな
何回書きかえたら壊れるか(書けなくなるか)に関しては
実際に試して確認した情報を どっかで見たな

694:774ワット発電中さん
19/02/23 22:28:32.89 BGsrrv4G.net
見たな

695:774ワット発電中さん
19/02/23 22:30:59.40 9rPqi2pp.net
見た見たってオバケみたい

696:774ワット発電中さん
19/02/26 00:57:37.44 NFTn/ZGf.net
ESP-WROOM-02にリセットボタンを付けて連続でパチパチとリセットしてたら、
テレビの受信デシベルが低くなって映像が途切れたりした。
2.4Ghzって地デジの電波に影響あるんだな

697:774ワット発電中さん
19/02/26 23:06:05.57 UzzwTNJy.net
>>673
リードが64本か・・・

698:774ワット発電中さん
19/02/26 23:16:34.98 +WFg7jAV.net
>>678
球状の缶からウニみたいに出てくるリード

誰か作らんかなぁ

699:774ワット発電中さん
19/02/27 01:03:40.41 PlbPXMaw.net
フラッシュに書き込んだプログラムがいつまで保持されてるのか気になる
たしか100年ぐらいは持つんだっけな?
書き込みを繰り返したやつは酸化膜がやられてて電荷が抜けるのが早くなるだろう

700:774ワット発電中さん
19/02/27 01:56:25.10 3+9bHPDt.net
>>680
フラッシュは20年や
データシートの表紙みろや

701:774ワット発電中さん
19/02/27 02:16:59.98 zzvMYAu+.net
見た!
電源切った!
寝るー!

702:774ワット発電中さん
19/02/27 03:25:04.95 MVY/lNE/.net
ちょっとさっきくしゃみしたら
変換基盤に仮置きしていたATtiny10が全部消えたんだが?
こないだ家電のケンちゃんで書き込み用補助具買ったばかりなんだが?
秋月の10個入り全部消えたんだが?
朝の鼻くそに混ざっていそうなんだが?

703:774ワット発電中さん
19/02/27 08:13:50.66 94TjmYL5.net
小せいのはICでなくお前のケツの穴というオチかい?

704:774ワット発電中さん
19/02/27 19:35:10.51 adapApLE.net
>>673
缶のオペアンプを開けて中にATtiny85埋め込むか?

705:774ワット発電中さん
19/02/27 20:47:39.08 MVY/lNE/.net
>>684
バカヤロー鼻くそだって書いてあっだろ!
俺の繊細なケツからあんなもん出てきたらあっという間にパンツ血まみれ

706:774ワット発電中さん
19/02/27 21:42:41.17 T/B+R8oC.net
SSDなら耐久テストをしたサイトがあったな
東芝製が書き込み禁止にして保護するとか

707:774ワット発電中さん
19/02/27 21:58:05.37 adapApLE.net
>>687
その人福島の地震で死んだはず

708:774ワット発電中さん
19/02/27 22:46:46.58 6AVGd6dV.net
UART経由でターミナルに文字列吐いてからパワーダウンスリープするプログラム作ってみたんだけど、
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
}
ターミナルに表示される文字列の末尾が文字化けしてしまう。
(上記のプログラムは一文字UARTに送信する関数。
これを連続呼び出しすることで文字列をターミナルに送ってる)
パワーダウンではなくアイドルスリープに変更したり、スリープそのものをしないようにすれば
末尾まで正常に表示されることからUARTの送信バッファから文字が全て吐かれる前に
AVRがスリープしちゃってるのが原因じゃ無いかと踏んだ。
だったら送信バッファが空になるまで待てばいいじゃんと思い、
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
}
と修正してみたけど変わらなかった。他にも送信シフトレジスタが空になったとされるTXCフラグが1
になるまで待ってみたりしたけど、



709: while( !(UCSR0A & _BV(TXC0)) || !(UCSR0A & _BV(UDRE0)) )  ; これも変わらなかった。最後の一文字までターミナルに無事送り届けられたタイミングを知るには どうしたらいいのかな?



710:774ワット発電中さん
19/02/27 23:05:56.16 RapFhyb5.net
>>689
AVRのプログラム経験あまり無いけどバッファが空に成った後に空ループ回しながら暫く待ってスリープは試してみた?

711:774ワット発電中さん
19/02/27 23:25:39.92 ytHC5ZXo.net
TXCフラグは割り込みを使用していなければ、
プログラムから動的にクリアされなければならない。
UDR0 = x;
の次に
UCSR0A |= _BV(TXC0);
っていれてみれば?

712:774ワット発電中さん
19/02/27 23:29:04.24 1y6F2gOX.net
>>690の対症療法でもいいが…そもそも根本的な勘違いがある。TXCフラグの説明読んだか?
『The TXCn Flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location.』
とある。日本語にすると『TXCnフラグは、送信完了割込みを起こすか、自分で1を書くことで初期化できます。』ということだ
つまり、送信完了割込みを使ってないのならば、自分で毎回クリアしないと、最初に何か送信して空になって1になったら…あとはずっと1のままだ!!!
送信中は0で終わったら1に勝手に変わるとかいう便利なものではないぞ???

713:774ワット発電中さん
19/02/27 23:35:55.82 0TOANvas.net
なぜ動かないんだ!MPUのバグか?
って時の99%は、データシートをちゃんと読んで
無かった自分のせい

714:774ワット発電中さん
19/02/27 23:40:07.26 MwsScFW1.net
どうでも良いけど、なぜ
loop_until_bit_is_clear();
使わないんだ?

715:774ワット発電中さん
19/02/27 23:59:49.64 6AVGd6dV.net
>>690
↓みたいにforループ1000回入れてみたら最後までターミナルに正しく表示されるようになったから
 たぶん送信バッファを確実に空にするまで待つ、という戦略であってると思う
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 for(int i=0;i<1000;i++)
 ;
}
>>691
ほ、ほんとだ!
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 UCSR0A |= _BV(TXC0);
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
}
これでも正しく末尾まで正しくターミナルに表示されるようになった!
>>692
そういうことなのね。自分で1にsetしてやらないと0に戻らないのね。
勉強になった、ありがとうノシ

716:774ワット発電中さん
19/02/28 06:31:20.36 UjtlN9fm.net
Aliで売ってる1000円以下のJTAGって使い物になる?

717:774ワット発電中さん
19/02/28 06:49:50.65 U+qVd/wO.net
>>695
for(int i=0;i<1000;i++);
って、最適化したら真っ先に消されるコードだろ?

718:774ワット発電中さん
19/02/28 07:12:05.26 7MTrS+a2.net
「馬鹿の考え休むに似たり」

719:774ワット発電中さん
19/02/28 07:46:58.49 Nn1mUl6z.net
>>697
intの前に「volatile」付ければ?
>>695
問題解決良かったね。
>>692
AVR初心者として参考になった。
ありがとう。
>>693
そう。焦れば焦るほどバグ、つまり自分のミスに気付かない。
俺はプログラミングは己れの煩悩を取り払う能力を養う最強の修行法だと解ったわ。

720:774ワット発電中さん
19/02/28 20:03:42.63 uVd7pv8a.net
デジタル時代の写経だなw

721:774ワット発電中さん
19/02/28 20:27:12.64 JyrSY46l.net
デバッガ使いまくってる軟弱ものでスマン

722:774ワット発電中さん
19/02/28 20:42:53.98 uv1Hvimb.net
>>695
送信後のウエイト処理で見ているフラグが違うと思います。
while ( !(UCSR0A & (1<<TXC0)) );
こうじゃないですか?

723:774ワット発電中さん
19/02/28 23:56:04.02 S1p7QpKp.net
>>702
すんません
凡ミスしてた
> while ( !(UCSR0A & (1<<TXC0)) );
そうです、それで正しいっ


724:キ



725:774ワット発電中さん
19/03/01 11:34:43.01 cT6i7a3v.net
>>694

726:774ワット発電中さん
19/03/01 14:30:22.06 RmtoqY4z.net
所詮マクロだし推奨するのは構わんが強制することでもないべ

727:774ワット発電中さん
19/03/08 10:26:54.69 zI2zNano.net
AVRマイコンはプログラムメモリの自己書き替えはブートローダー用の領域に書き込まれた
プログラムからしかできないんだな。アプリケーション用領域に書き込まれたプログラムからだと
書き替えのための処理が無視される。良く読めばデータシートにも書いてある。
PICマイコンからの類推で当然できるものだとおもってたから意外。

728:774ワット発電中さん
19/03/08 11:05:20.98 5UY1pC+P.net
デバイスによる。
ブートローダ領域の無いものはどこからでも実行できる。

729:774ワット発電中さん
19/03/12 23:35:27.82 /5m/NIze.net
割り込みに呼応する関数は一般的にmain関数の前に記述するわけだけど、
volatile unsigned char x;
ISR(USART_RX_vect)
{
x = UDR0;
}
int main()
{
・・・
}
割り込みに呼応する関数を丸々関連するヘッダファイル(uart.h)に移動してやって
そのヘッダファイルをincludeすれば割り込み処理も忘れずに定義できることを思いついてこうした、
#include "uart.h"
int main()
{
・・・
}
記述もすごくシンプルになって満足していたんだけどAtmel Studioのコンパイラーから3つの警告が出るようになった。
警告 2 type of '__vector_18' defaults to 'int' [enabled by default]
警告 1 return type defaults to 'int' [enabled by default]
警告 3 control reaches end of non-void function [-Wreturn-type]
割り込み処理をまるまるヘッダファイル(uart.h)に移動してやっただけなのになんでこんな警告が出るんだろう?

730:774ワット発電中さん
19/03/12 23:45:25.49 /5m/NIze.net
あと話は全く変わるんだけど今ChaN氏のFatFs使ってSDカードに書き込みするプログラム組んでるんだけど
付属のf_puts関数でSDカードにデータを書くのは問題無く出来てるんだけど
もう一つの付属のf_printf関数でSDカードにデータを書き込もうとするとエラーが返ってくる。
原因をしらみつぶしに調べていったところグローバル領域で宣言した配列の要素数がある程度大きくなると
f_printfの方だけエラーが出るっぽいところまで突き止めた。(f_putsの方は要素数によらず常に書き込みに成功する)
具体的にはグローバル領域で、
volatile unsigned char hogehoge[255];
みたいな巨大配列を宣言するとf_printfによる書き込みが失敗する。
配列の要素数を少し減らして、
volatile unsigned char hogehoge[200];
にするとf_printfでも問題無く書き込みできるようになる。
ターゲットはATmega328P。
プログラムメモリもデータメモリも90%以下の値であることは確認済み。
オーバーフローしてるわけではない。
宣言した配列のサイズによってプログラムが異常動作するなんてことはありえるかね?

731:774ワット発電中さん
19/03/13 00:02:52.38 BChGBX8R.net
>>709
ビルドログに出てくるデータメモリの使用率はグローバル宣言した変数分のみ。RAMはファンクション内で宣言した変数にも使われるから足りなくなることはある。

732:774ワット発電中さん
19/03/13 01:28:28.30 JK0CeApG.net
スタックもじゃね?
グローバル変数+ローカル変数+スタック≦RAM
でなければならん
アセンブラで書いてないと取りうるスタックの最大量は読みにくい

733:774ワット発電中さん
19/03/13 06:30:52.15 qNBzP1Vx.net
>>708
Cの言語仕様上、そうなるんじゃね?

734:774ワット発電中さん
19/03/13 07:54:19.03 f8c4PDBy.net
>708
ぱっと見だけど、char xがグローバル変数なのに、グローバル変数として宣言できてないのでは?

735:774ワット発電中さん
19/03/13 08:23:57.94 WoGC53wT.net
オイラもそんな希ガス

736:774ワット発電中さん
19/03/13 08:25:30.24 WbI6GhOW.net
そもそもヘッダファイルに入れる意味あるのか?
忘れずにと言うが、main関数のあるファイルからしかincludeしないなら、そこに直書きするのと何が違うのか

737:774ワット発電中さん
19/03/13 08:38:58.32 3EPG0DWL.net
>>708
#include "uart.h" の前かuart.hの中にavr/interrupt.hが無いから。

738:774ワット発電中さん
19/03/13 23:42:56.28 RGwTm6P4.net
>>710
>>711
そういうことなのね
コンパイルしてメモリ使用量が100%未満だからといって安心しちゃいけないのか
>>713
volatile unsigned char x;
だけmain関数の真上のグローバル変数領域に移設してみたけど
エラーが出るようになっちゃった
>>716
一応"uart.h"の前でavr/interrupt.hは宣言してあったわ
ヘッダーファイルに割り込み処理を押し込もうとしたのはそもそもの間違いか
下手に楽しようとせずmain関数の上に書くようにするわ
ありがとう

739:774ワット発電中さん
19/03/14 00:20:00.08 QNl9+HES.net
>>717
ヘッダーに関数その物を書くのが作法違反っすよ

740:774ワット発電中さん
19/03/14 06:55:52.34 2HCCJtDa.net
>>717
volatile unsigned char x;
の前で uart.h をインクルードしているのでは?
uart.h の中で変数 x を使うコードが書かれていると、そんな変数知らないとコンパイラに叱られる
一見、すっきりした様に見えるけど、uart,h の中にプログラムコードを書くのは違うような気がする
ISR() を外に出したいのなら uart.c のような別の *.c ファイルに記述して、 必要な定義類を uart.h に記載するのが良いでしょう

741:774ワット発電中さん
19/03/14 11:50:44.14 rLeIhSLi.net
Cはあほ言語だからな。

742:774ワット発電中さん
19/03/14 13:50:37.87 LZnKV9qc.net
×あほ言語
○あほには使えない言語

743:774ワット発電中さん
19/03/14 14:22:23.10 ANpkEu8K.net
Cは、エンジニアの個性と能力が、目立つ言語。

744:774ワット発電中さん
19/03/14 14:30:39.02 +EIIS3sp.net
Cがアホ言語かどうかはともかく、
なんでこんなにMCU向けにCがはやるようになったんだろ?
FORTHなんか機械制御用として作られたユニークな言語だし、
小さなMCU向けにはVTLみたいなものでも十分だと思うけどな。
だれかアッと驚くようなD言語処理系でも作っておくれでないかえ。

745:774ワット発電中さん
19/03/14 14:47:55.22 +m943z4G.net
ラダー最強

746:774ワット発電中さん
19/03/14 16:42:21.46 UHNeTLui.net
>>723
いまさらテープドライブ?
まあMCUならいいのかもね。

747:774ワット発電中さん
19/03/14 16:59:54.20 8EXHrIv3.net
当時はさ
CPU速度が遅くメモリも潤沢ではなかったが為に
インタプリタ系言語が敬遠されたってだけだと思う
PASCALもpコードの奴はトロいしw

748:774ワット発電中さん
19/03/14 17:53:01.26 rLeIhSLi.net
Cの設計思想はコンパイラ開発者に楽させるためだから、Cはあほ言語なんだよ。
プログラマに楽させるためのJavaとは真逆の設計思想。

749:774ワット発電中さん
19/03/14 18:22:26.68 SrpVBwWG.net
Cはあほ言語なんだよ、だってさ。あの人いつも極論言ってカッコイイって思ってるのかな。クスクス。

750:774ワット発電中さん
19/03/14 18:41:34.96 w/46pvfA.net
Javaで楽になった感じが全くないですよ。

751:774ワット発電中さん
19/03/14 19:27:05.42 LQVzyV9A.net
なに使ってもダメな人はダメ
アホなのは言語じゃなくて
その言語の思想を理解できずに
「あほ」って言っちゃう方
所詮、道具なんだから気に入らなきゃ
スルーして別の道具を選択するなり、
自分で道具から作りゃいいのに…

752:774ワット発電中さん
19/03/14 20:50:09.37 tV5MuKOm.net
>>718
>>719
反省しとります
ヘッダーに記述するのやめておきますm(_ _)m

753:774ワット発電中さん
19/03/14 22:35:24.46 UHNeTLui.net
>>730
自分でコンパイラ作るの?
しかもアセンブラで


754:?



755:774ワット発電中さん
19/03/14 22:56:20.37 FyQ3iwa4.net
>>732
ツールってのはそうやって出来てきたんだよ
既存のツールにどうしても馴染めなきゃ、
諦めるか、自分でツールを作るしかないだろうが

756:774ワット発電中さん
19/03/14 23:04:01.83 ZKU10XCo.net
yacc?

757:774ワット発電中さん
19/03/14 23:29:15.18 dt1h3V4+.net
今からC言語を学習する人は可哀想だね。
大抵の場合、組込みでしか役に立たないし…、しかも給与高く無いという。
まあ、趣味で使うなら作法とかそんなのは気にせずとりあえず動けば良いと思います。

758:774ワット発電中さん
19/03/15 00:02:40.56 d2NCHrvu.net
>>735
同情申し上げます

759:774ワット発電中さん
19/03/15 00:12:38.69 TxWpqddu.net
食うために言語をマスターするという発想しか浮かばない境遇そのものが可哀相

760:774ワット発電中さん
19/03/15 00:41:13.13 rCdt+OMG.net
C使ってても給料高い人はいくらでもいるけどな。
別に組み込み以外でも、ドライバ開発だったり、ライブラリの高速化とかで需要はあるだろう。
ドライバ開発とか、毎回とんでもない金がかかる。。。
自分でやれればいいんだけど、あれは無理。

761:774ワット発電中さん
19/03/15 00:47:13.16 EvJ0Nfi+.net
何か一つの言語を深くマスターできていれば
他の言語もすぐにマスター出来る
逆も真で、ダメな奴はどんな言語を選んでも
ものに出来ない

762:774ワット発電中さん
19/03/15 01:03:59.37 KINFq6a1.net
C言語は習得が難しい割には、一般的には収入低いのは確か。
簡単な組み込みが多いからかな?
OS周辺や、ドライバ開発となると、C言語出来るというより、単純に能力が高くないと無理なので、
収入高そうですね。
C言語出来るというだけでは、コピペできるか、ある程度スクラッチできるか、
ライブラリ作れるか、ドライバ作れるか、OS作れるか、言語そのもの作れるか、
と範囲が広すぎて、能力を把握できませんね。

763:774ワット発電中さん
19/03/15 06:43:49.46 mLF/yedB.net
今はさいつよFree Pascalがあるやろ

764:774ワット発電中さん
19/03/15 07:39:27.72 zaIVuebS.net
「プログラミング言語別年収ランキング 2018」を見ると
Cプログラマは最下位(10位)で可哀想にプログラマ業界のワーキングプアだ
URLリンク(tech-camp.in)
俺はMCUに関してはフルアセンブラ派なので競争相手が全く不在で
こんな言語を超越して稼ぎまくっているから関係無いけどw

765:774ワット発電中さん
19/03/15 08:59:50.15 bXgu3KXE.net
ラダー最強

766:774ワット発電中さん
19/03/15 09:37:50.25 6cfdUFL2.net
>>739
Haskell でもやってみな。

767:774ワット発電中さん
19/03/15 09:51:07.60 7NBkQbTZ.net
>>744
クイックソートの例を見てみたけどCより遥かにスッキリ書けるね
AVR用のコンパイラとデバッガは存在するの?

768:774ワット発電中さん
19/03/15 10:19:52.74 KINFq6a1.net
Haskll てH言語?
「頻繁に IO を行うプログラム: IO などの不純な行為は Haskell は苦手。」
URLリンク(www.shido.info)

769:735
19/03/16 10:54:47.24 cwPLN8G/.net
自分は組込み屋ではないですし、Cは1年に1回程度チラッと仕様確認で見る程度ですね。あとは趣味のAVRで利用する程度です。
ただ、IT土方で薄給なのは事実ですが…。
ただ、どうせやるなら趣味でも仕事でも新しい方が“何となく“良い気がしませんか?(錯覚かも知れませんが)
まあ、C以前の低級言語は、コンピュータの動作がどうなってるか学習も出来るので、やって損は無いとも思います。でも、やっぱり今更感が強いですね。

770:774ワット発電中さん
19/03/17 00:34:05.57 P7v+ZriH.net
言語よりも、成果物だもんなぁ・・・・
自分が成果物を出しやすい言語を使えばそれでいいわけで。
もちろん、職場とか取引先で指定もあるけど、ライブラリにして投げ渡すという手もあるし。

771:774ワット発電中さん
19/03/17 19:17:08.97 GAxdTCzB.net
最近の若い奴は

772:774ワット発電中さん
19/03/17 19:34:42.12 sgny0tDF.net
昔はみんなコツコツ薪を集めてお風呂を沸かしてたのに
最近の若い奴はボタン一つで風呂沸かしやがって

773:774ワット発電中さん
19/03/17 19:42:50.55 dKn3NhyT.net
ゆとり元年のガキが2010年入社だったが
最近のは更にゆとり教育期間が長くてもうえげつない動物みたいな奴ばっかだな

774:774ワット発電中さん
19/03/17 21:29:14.86 P7v+ZriH.net
>>751
ゆとりだけが原因じゃないんだぜ。
採用活動の制約のせいで経団連加入の企業は、
それ以外の企業が採った後の残りかすしか採用できてない現状。

775:774ワット発電中さん
19/03/18 19:24:14.97 mkKs6vGL.net
>>751
それはご愁傷様。
こちらの観測範囲だと若い子ほど優秀な印象。
内向的ゆえかコミュニケーション能力高いし。
並みの子が来たがらない環境なんじゃない。
最近はそう言う情報も流れてるし。

776:774ワット発電中さん
19/03/18 20:50:53.58 PswMwFQm.net
つまり観測地点が低いのか

777:774ワット発電中さん
19/03/18 21:40:16.45 z6PBufMM.net
最近のゆとりは魚が切り身で泳いでると思ってるとかどうたらこうたら

778:774ワット発電中さん
19/03/18 22:25:41.52 d+1Vn6zJ.net
同じ処理の繰り返しって積極的に関数化した方がいい?
プログラムメモリ的にも関数化した方がコンパクトになるのかな?

779:774ワット発電中さん
19/03/18 22:28:02.34 kvz6s+wm.net
ソースはコンパクトになるけど、どうなんだろ

780:774ワット発電中さん
19/03/19 00:18:45.43 TW2RwHlM.net
関数コールする度にスタックを食い潰して行くからなぁ
ATtinyとかはSRAMがすくないので、極力関数化せずに、
マクロを多用している

781:774ワット発電中さん
19/03/19 01:03:40.16 7rOv8Vut.net
>>756
基本は、関数だけど。
スタック消費を避けたいときと、処理速度を上げたいときは、マクロも検討します。
ただ、デバッグが面倒になるときと、マクロの副作用もあるので慎重に。

782:774ワット発電中さん
19/03/19 12:29:34.55 WbsHU5pc.net
とりあえず関数で書いて完成したらROMの許す限り展開するだけだな俺は

783:774ワット発電中さん
19/03/19 12:54:55.70 usLKQzVR.net
メモリにも処理速度にも問題が無いならそんな余計なことはしないな俺は

784:774ワット発電中さん
19/03/19 13:10:38.66 7rOv8Vut.net
>>761
コンパイラの吐いたコード見て、思わずマクロにすることはありますね。
パラメタの数だけ、スタック退避されてビビル。
コンパイラの最適化によるけど、参照だけなら const つけるとか、
あえて、パラメタ変数をグローバルで宣言するとかもあるけど
メモリ許せば、マクロかな〜
ケースバイケースで、指示が無い限りは、センスに任せるっていったところか。

785:774ワット発電中さん
19/03/19 14:27:48.23 usLKQzVR.net
スタック無しでもそこそこのパラメータ渡せるのに、
スタックにまでパラメータ積む様なコードって汚そうだなぁ。
ポインタ渡しとかにしときなよ。

786:774ワット発電中さん
19/03/19 16:09:39.38 7rOv8Vut.net
>>763
avrgccに限らずっ


787:ト話ですよ。 コンパイラの最適化もあるし、 ポインタ渡しにしたら、変数アクセスごとに、インデクスレジスタを 更新しますからね、当たり前の話ですけど。 そのオーバーヘッドとコード領域の増加を避けたいこともあるのです。



788:774ワット発電中さん
19/03/19 16:12:18.33 usLKQzVR.net
ここはAVRスレな

789:774ワット発電中さん
19/03/19 22:08:36.43 5PdCFg0Y.net
なぜC++のinlineを使わないのだろう…

790:774ワット発電中さん
19/03/20 15:52:18.55 9nlylGr/.net
AVRライターに純正のAVRISPMK2ってのがあるけど、これって何か特別優れた点があるの?
純正だから安心的な話じゃなくて機能的に。
と、言うのも中華な激安AVR(と比べると失礼かもしれないが)とくらべると明らかに基板の密集度が違う。
ほかの多くは電源供給できるが、この製品はそれもできない。
何か優れた点があるのかなのと気になって・・・

791:774ワット発電中さん
19/03/20 16:06:12.33 /dfV2r3/.net
アトメル純正はどれも電源供給はできない。
『純正である』信用以外のメリットはこれと言って無いと言っていい。
しかも本家ISPmk2はとっくの昔に販売終了していて、あっても店頭の売れ残りだけ。
最新のデバッグインタ−フェースであるUPDIにも対応していない。

792:774ワット発電中さん
19/03/20 16:15:38.45 JtPc8HPH.net
>>768
世の中にあふれるどのライターよりも複雑なんでなんかすごいのかと思ってたけどそんなことはなかったんですね。
つか、販売終了してたとは知らなかったです。
ポチる前に聞いておいてよかった。
他の物色します。これ結構いいお値段するんで・・・
回答どもでした。

793:774ワット発電中さん
19/03/20 16:52:41.80 /dfV2r3/.net
ライターでしかないISPmk2買う勇気があるなら、
デバッグもできるAtmel ICE買う方を勧めますよ。

794:774ワット発電中さん
19/03/20 18:53:48.22 zjzPx8Pp.net
USART付き8ピン欲しい

795:774ワット発電中さん
19/03/20 19:00:22.47 9U7nIXcG.net
85のUSIで事足りるやろ

796:774ワット発電中さん
19/03/20 19:13:38.27 /dfV2r3/.net
attiny202/402/212/412の4種類あるね。DIPは無いけど。

797:774ワット発電中さん
19/03/20 19:19:27.66 /dfV2r3/.net
mega808なんて出すのか。
120円くらいと予想。

798:774ワット発電中さん
19/03/20 19:20:08.95 zjzPx8Pp.net
USIはI2Cで使ってるので
ソフトだと速度出ないし

799:774ワット発電中さん
19/03/20 19:21:37.37 yov4tgl+.net
tiny3216が便利すぎてまとめ買いしたこればっか使っとるわ

800:774ワット発電中さん
19/03/20 19:25:14.54 yov4tgl+.net
速度出すなら水晶欲しいな…?
VCC!GND!XTAL1!XTAL2!SDA!SCL!TXD!RXD!
リセット殺しても他になんも付かねぇ!!
どうでもいいけど8ピンのDIPかわいいよね

801:774ワット発電中さん
19/03/20 19:26:45.58 /dfV2r3/.net
>>776
3216が出る前に1616をまとめ買いしてめっちゃ使ってるw
ICE使っても1ピン喰われるだけだし、デバッグは安定してるし、いい子だよ。
mega3208もお気に入り。

802:774ワット発電中さん
19/03/20 19:31:36.78 /dfV2r3/.net
tiniy0/1シリーズなら内部20MHz有るんだから水晶要らないっしょ。
クロックの出荷時誤差書き込んでくれてるし、オートボーレート機能有るし。
てかそもそも水晶付けらんないし・・・

803:774ワット発電中さん
19/03/20 19:35:45.51 yov4tgl+.net
内蔵はVCC固定でも温度ドリフトすげーんだもん

804:774ワット発電中さん
19/03/20 19:41:38.96 /dfV2r3/.net
代表特性だと全動作温度範囲で0.5%くらいに収まってるから大丈夫なんじゃない?
クロックをオシロで見ながらドライヤー当てて見たけど全然動かん。

805:774ワット発電中さん
19/03/20 20:34:41.77 olT7veZT.net
>>770
デバッグボードってあったほうがいい?

806:774ワット発電中さん
19/03/20 20:51:17.05 jeeS7STF.net
最近のは水晶付けられないんで音程狂って使えないんだよなー。
外付け発振器だと高くつくし

807:774ワット発電中さん
19/03/20 21:44:08.97 tbFELgCY.net
>>776
おすすめのライター教えて
ATtiny416-xnanoの半分使っても書けそうだけど…

808:770
19/03/20 21:55:33.80 thgWWikS.net
>>782
「デバッガ」だよ。Atmel ICE↓
URLリンク(akizukidenshi.com)
使ってみないと良さは伝わらんと思うけど、
一度使うとこれ無しにデバッグする気になれないと思うよ。

809:770
19/03/20 21:59:06.18 thgWWikS.net
あ、最近のデバイスならPICKit4でもデバッグできるんだっけ↓
URLリンク(akizukidenshi.com)
電源も供給できるし、誰か人柱になってくれw

810:774ワット発電中さん
19/03/20 22:06:05.53 AW68H+U3.net
>>781
最初の頃UARTが全然届かなくて水晶にしたら解決して以来、
基本内蔵は使ってないんだけど、
そこら辺どう?

811:774ワット発電中さん
19/03/20 22:20:55.96 thgWWikS.net
>>787
屋内使用限定で通信エラーが重要じゃない売り物でそこそこの数出てるけど、文字化けの報告は一度もない。
一応20台くらい-20〜50度の環境試験かけたけど、文字化けは1台も無かった。
社内用のちょっとした治具でもUARTは当たり前のように使うけど、xmegaや今のtinyに水晶を積んだことは無いな。
もちろんトラブル無し。
tiny2313やmega328はダメダメだったなあ。

812:774ワット発電中さん
19/03/20 22:56:54.37 /xxnFTED.net
>>788
有益!!

813:774ワット発電中さん
19/03/20 23:03:57.32 thgWWikS.net
経年劣化は知らんよ。
言い訳のできない産業用途なら俺でも水晶発振器積む。
用途とコスト次第ってことよね。

814:774ワット発電中さん
19/03/21 00:00:10.90 F6vzKlqH.net
PICkit4は十分使えるよ!

815:774ワット発電中さん
19/03/21 03:00:51.90 ZsdWucVz.net
Atmel STARTじゃtiny3216なんかのボーレート補正コード吐いてくれないんだよな。
水晶付けられなくしたんならその辺ちゃんとしろよって思う。
プログラムで補正したボーレートレジスタ設定値を計算させたらコード量が膨大になったよ。
inline関数にして可能な限りプリプロセッサ任せにしたら激減したけど。

816:774ワット発電中さん
19/03/21 06:42:29.39 EbOpCm0u.net
レゾネーターじゃダメなん?

817:774ワット発電中さん
19/03/22 12:51:55.43 J59YH1xs.net
ここ何日か、tiny2313+内蔵OSC8MHz+19.2Kボーで
UARTをデバッグ用に使っているけど、文字化けは経験していない。
ただし仕事(金を貰う)の仕様として使うUARTなら水晶を使う。

818:774ワット発電中さん
19/03/22 13:20:07.97 lUkHhnxP.net
室内じゃたいした温度変化ないからそんなもんよ。
ドライヤー当ててみな。

819:774ワット発電中さん
19/03/22 13:21:33.79 lsTU/L+y.net
AVRは電源電圧変わると周波数変わるから

820:774ワット発電中さん
19/03/22 14:30:14.45 0+RbTafq.net
19200じゃどうでもええやろ
250000とか115200のハナシ

821:774ワット発電中さん
19/03/22 15:00:20.28 lUkHhnxP.net
クロック精度の話してんだからボーレート関係ないな。
精度が悪けりゃ300bpsであろうとも化けるさ。

822:774ワット発電中さん
19/03/22 16:26:56.91 zWtNcRru.net
>>788
使い始めてダメだったの丁度その二つだ。
xmega系使うときあったら内蔵試そうかな。
むしろどんな仕事なのかが気になった。

XMEGA32って安いのね

823:774ワット発電中さん
19/03/22 16:37:17.46 lUkHhnxP.net
同じQFP32ピンならmega3208はもっと安いよ。
こいつも内部クロックが最近のタイプの隠れxmega系列。

824:774ワット発電中さん
19/03/22 21:52


825::37.05 ID:qjm5MvQR.net




次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1728日前に更新/263 KB
担当:undef