11-ESP8266 SDK開發基礎入門篇--軟硬件定時器


https://www.cnblogs.com/yangfengwu/p/11094009.html

定時器有兩種,軟件定時器和硬件定時器

軟件定時器就是靠里面的任務延時實現的,,這樣的定時器其實延時不准確

硬件定時器 就是硬件中斷定時器,咱都學過單片機,中斷的准確

 

先看軟件定時器

 

 具體大家看下面

所以第一步,定義一個定時器變量

可以看這個文件,咱就是用這個頭文件

 

 

 os_timer_t os_timer_one;//定義一個全局的定時器結構體變量

 

 

 

 

 

先看帶參數的

 

 

 

void *XXX   就是說可以接收任意的指針變量

 

//定義一個定時器用的回調函數
void os_timer_one_function(void *parg)
{
    printf("parg:%s\n", parg);//打印一下傳過來的參數
    GPIO_OUTPUT_SET(5, 1-GPIO_INPUT_GET(5));//GPIO5輸出 反轉
}

 

 

os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");//配置定時器          定時器結構體變量         回調函數                   傳給回調函數的參數
    os_timer_arm(&os_timer_one,500,1);//使能定時器    os_timer_one--定時器變量    500--500ms進一次       1--循環進去

 

 下載進去

500ms亮   500ms滅

 

 

其實這個參數是

os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");
這個時候傳過去的,只傳這一次,只不過,局部變量的值設置了是yang 后期進中斷的時候都沒有去設置這個參數

 

 

 

不帶參數就不說了哈

大家自己測試,報不報錯就看官方底層怎么寫的了

 

 

 

 現在看硬件中斷定時器

 

 

 

 

 

 

 

 

然后...官方給了例子

 

 

咱就稍微改改回調函數里面的

 

 

 

 

 

 程序掛了......不可以運行了,總是=重啟

 

然后我把

 

 程序又好了

我感覺這個定時器是us級的定時器

1000  才1ms

1ms進一次執行  printf    printf還沒執行完  中斷又到了     所以程序崩了

 

 

u32 cnt = 0;
void hw_test_timer_cb(void)
{
    cnt++;
    if(cnt>1000)
    {
        cnt=0;
        printf("1111111111111:%s\n");//打印
    }
}

 

 

 

 

 

 

 

 忘了..我后面怎么加了個%s  忘了去掉了

 

 

 

 

 https://www.cnblogs.com/yangfengwu/p/11100552.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM