_delay_ms()がおかしい anchor.png

_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以上にしないとおかしくなるようだ。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1111, today: 1, yesterday: 0
最終更新: 2020-12-26 (土) 16:08:07 (JST) (1188d) by yuji