上週的嵌入式實驗課做了乙個關於adc的實驗,即用從5v中用變阻器分出一部分電壓,用adc取樣量化作為輸入訊號,要求是使led閃爍頻率隨這個訊號限值(包括上限a上和下限a下)的幅度的增大而變快。
設輸入訊號幅度是a,乙個思路是用延時,a-a下 越大,兩次亮燈之間的延時越小,這樣也就是閃得越快了。低於下限的時候同理。不過這篇隨筆主要不是講這個思路有多好(一般都能想到這個思路),而是要說它的實現。
先說說當時是怎麼做的吧。。由於已經給了例程,一般情況下為了圖方便省事是直接修改,或者呼叫裡面的函式(而且是只看介面不看內部)。一般情況下都有這麼乙個delay的函式
中
extern __io uint32_t timingdelay;void
delay(__io uint32_t ntime)
在寫中斷原始檔中
__io uint32_t timingdelay = 0;void systick_handler(void
)
當然還要配置systick,開啟定時器,這樣才能進入systick_handler中斷
可是上面這些都配置好了以後,這個delay函式只能在main.c 中呼叫,但問題是 led亮滅(閃爍)本身就是在中斷裡面完成的
void adc1_2_irqhandler(void)
如果在stm32f10x_it.c中呼叫delay,即
void adc1_2_irqhandler(void)
(下面才是本文重點要說的)
這時候朱哥提醒了我,要不用for迴圈來做延時得了。一試如夢初醒茅塞頓開!然後一下子有了很多想法(主要是反思)思維又被限制了好嗎!
1.
//說明:adc給過來的值的範圍a是0~4096,a
上是2816,a
下是768
//
系統晶振是25m
//
3000是放大因子
void adc1_2_irqhandler(void
)else
printf(
"interrupt occur\r");
stm_eval_ledoff(led1);
if(adc_getconversionvalue(adc1)>2000
)else
printf("\r
");/*
clear adc1 awd pending interrupt bit
*/adc_clearitpendingbit(adc1, adc_it_awd);
}
試驗效果ok,達到要求。
2.剛學51的時候,郭天祥老師的書上教了兩種延時的方法:可以直接在其中用for迴圈來耗掉時間,這種方法中間不能做其他事,而且不是很精確;
//<新概念51微控制器c語言教程》中用來延時n毫秒的方法
//當然也可以只用乙個for
void delay_ms(uint
n)
也可以用中斷來實現,這樣可以在期間做其他事情,既保證了效率又可以更精確計時。
但是,並非所有場合都必須要用中斷!在要求不高(時間精度或者功耗要求等)的場合,for延時夠用了!簡單方便,測試看延時的效果夠用了。
要把學過的東西融匯貫通,思維不要被約束和限制,明確目的!這裡的目的首先是要達到要求,其次才是看你會不會正確用中斷什麼的
3.3.1
《黑客與畫家》的譯者總結,原著作者paul graham有一套完整的創業哲學,他的創業公式是:
(1)搭建原型
(2)上線運營(別管bug)
(3)收集反饋
(4)調整產品
(5)成長壯大
paul graham還指出,不要過早優化你的產品,在這次實驗中也有異曲同工之妙。先完成作業要求,而不要一開始就想著出乙個完美的作品,然後再進一步優化,至少在完成要求後心態更好,頭腦清晰,不會有焦慮之急,有利於優化工作的進行。
3.2看上去更近的路不一定是捷徑(比如直接從另乙個工程裡面把與delay函式有關的的抄過來,在這裡就是用不了),繞遠路可能更快,這樣的例子在生活中很常見。
至少需要先思考一下再行動,大腦這個智慧型cpu不是白給的。
明確目標,努力執行
做開發三年,對於自己的能力不敢說怎麼樣。有很多想法,作為乙個開發人員來說,這一點很令我受益匪淺,經常地去了解一些前沿的技術,經常地去想一些有趣的東西,有時候,我覺得我的想法如果真的實現了的話,我一定能獲得一大筆財富。肯付出,對於工作,我願意用心去做。乙個任務交給我,我一定會努力去完成,不管什麼時候,...
精力管理7 明確目標
意志力量是目標最充足的源泉,意志精力 於深層價值取向和超越個人利益的目標。目標會激發決心。它促成了我們的全情投入,希望將精力集中在某件事情或某個目標上。只有真正深刻地關心自己所為真正有意義,人們才有可能做到全情投入。使命感是我們的火種,我們動力,也是我們的精神食糧。從培訓角度看,英雄之旅的意義在於調...
必須為下屬明確目標 ZZ
看了一篇比較通俗的目標管理,實際上就是 1 要有乙個schedule,2 至於這個schedule質量,那才是要看專案管理者的水準了。領導者們應當為下屬們確定目標,並把自己的意圖明明白白地傳達給他們,這是一種令人鼓舞的方式,是協調工作的基礎。鮑勃 湯森在 步步高公升 一書中說 領導 人的重要作用之一...