現: 2020-12-26 (土) 15:08:07 yuji ソース
Line 1: Line 1:
 +*_delay_ms()がおかしい [#l84c8425]
 +_delay_msを使っていたら,なんか意図したように時間が取れない。~
 +delay.hとdelay_basic.hを見ると,_delay_ms()は_delay_loop_2()をつかっている。_delay_loop_2()は,16bit数を-1ループになってるんで4クロック*65536=262.144ms(CPUが1MHzの時)までのdelayになる。8MHzだと32.768msまでしか正常にウエイト出来ない。~
 +_delay_us()も同様に,_delay_loop1()を使って,3クロック*256=768us(CPUが1MHzの時)までのdelayになる。8MHzだと96usまでしか正常にウエイト出来ない。~
 +
 +使うときは,
 + void __delay_ms(time) {
 +     while (time--)
 +         _delay_ms(1);
 + }
 +ってすれば大丈夫。~
 +
 +どうも最適化オプションは,-O1以上にしないとおかしくなるようだ。
  

  • 開発/AVR/_delay_ms()がおかしい のバックアップ差分(No. All)
    • 現: 2020-12-26 (土) 15:08:07 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1181, today: 1, yesterday: 2