修復NDS觸控螢幕校正問題
我還沒試,不過這修理的方法會不會太妙了點?
取這麼奇怪的標題是為了幫助有一樣問題的人能找到這篇文章…
因為內建麥克風故障已經可以算是NDSL的通病了(包括我自己也遇到..)
可是奇怪的是,卻都找不到任何修復方法的資訊?
所以…就來寫一寫吧!
NDSL (NDS Lite) 麥克風 (MIC / Microphone) 壞了/壞掉/故障/失效/沒反應/問題 修理Read More »
最近在物色一款能把我狠狠叫起床的鬧鐘,不過還是找不到。不太愛指針式的鐘,電子式的又往往鬧鈴聲音太小,而且更糟的是大都只能響鈴一分鐘….,看來看去好像沒半個合我意的。
絕望之餘只好往其它方向發展,結果就買了Nokia手機上面一個叫NiceAlarm的鬧鐘軟體。
不管是鬧鈴時間長短、間隔時間長短、鬧鈴次數,全部都可以自定。不像其它家的鬧鐘程式都是呼叫Nokia內建的鬧鈴,只能響一分鐘停五分鐘;用NiceAlarm愛響多久就響多久,多棒啊。
除此之外還有許許多多的美妙功能,像是鬧鈴音量不受手機切換操作模式影響,可隨機播放自定目錄的音樂等等。還有”按螢幕上隨機出現的五位數字密碼才能解除鬧鈴”的功能,等密碼按完不醒也得醒了,真是尿急尿急妙極妙極啊~
一直以來對廣播的網路電台沒什麼大興趣,因為音質太差,絕大部份資料流量都只有64kbps或更低,聽起來真的很不舒服。
今天稍為給他找了一下,找到幾個音質比較好的網路電台,可以聽聽看(點連結就行了):
IC之音 FM97.5 (128Kbps)
竹科那邊成立的電台。(難怪會有128K的科技力)
KISS RADIO網路音樂台 (96Kbps)
流量略低一點,不過聲音不錯哦~
台北愛樂 FM99.7 (128Kbps)
內容非常好,音質很清楚,人聲很好聽,不過….總覺得聲音像是用一般收音機來聽的感覺。
台北之音 FM107.7 (128Kbps)
HIT FM,雖然是128K的流量,不過我覺得聲音怪怪的,低頻好像都不見了?
好吧~起碼算是有得聽了。
Procyon AVRlib
C-Language Function Library for Atmel AVR Processors
由Pascal Stang所寫,一套AVR開發專用,非常了不起的函式庫
AVRlib和之前提過的avr-libc名字很像,不過絕對是不同的東西
avr-libc是類似C標準函式庫
AVRLib則是提供了許多較高階的函式
有多了不起?
來看看他有那些功能:
(這篇是從舊文章整理出來的)
GCC在compile的時候可以用-o的參數來設定optimize的程度,可設為不作最佳化(-○0),或是-o1~3和-os幾種最佳化的等級。-o0的時候是不會有什麼問題啦,不過程式不作optimize的話塞不進Tiny2313裏面。所以程式才寫到大概一半大小的時候就開始用最佳化compile,然後就發現有個地方一直很奇怪…..。
來看一小段程式:
tmp = RRR / 5 - 3; // tmp型別為int,所以不會取到小數部份
if (tmp > 5) {
AAA = 5;
} else if (tmp < 1) {
AAA = 1;
} else if (((RRR % 5) * 10 / 5) > 4) { // 手動四捨五入
AAA = tmp + 1;
}
這段程式主要是要把RRR轉換成AAA 1~5的數值。RRR正常是20~40,有時會超出這個範圍,所以用了兩個判斷式去限制住讓AAA不會爆掉,就這麼簡單而已。
然後…我發現不管RRR的數值是多少,他在第一個else if的地方程式執行時總認為tmp=0,所以,判斷式就成立,結果就是AAA永遠=1。
怪吧?更怪的是在如果第一個if前面先去判斷tmp的值來看看,他會告訴你tmp不等於0…。然後才過了兩行程式,tmp就變0了。
裏面所有的變數都是宣告為signed int,跟其它變數也都沒有衝突的問題。而且只要compile的時候不要作optimize,就一切正常,所以程式本身應該是沒問題的。
結果怎麼解?我把tmp拿掉就好了…直接寫成:
AAA = RRR / 5 - 3;
if (AAA > 5) {
AAA = 5;
} else if (AAA < 1) {
AAA = 0;
} else if (((RRR % 5) * 10 / 5) > 4) { // 手動四捨五入
AAA++;
}
這樣跑起來就正常了(?),看來大概這compiler討厭我的tmp吧?好吧,不去管原因了,就先加減用。結果過沒兩天我改了程式的其它不相干的地方之後,他又壞了。
這次一樣壞在第一個else if的地方,他總認為AAA = 0…最後又讓AAA變成永遠=1。 (你那麼愛讓AAA=1嗎?)
我只好再換另一種寫法:
AAA = RRR / 5;
if (AAA > 8) {
AAA = 8;
} else if (AAA < 4) {
AAA = 4;
} else if (((RRR % 5) * 10 / 5) > 4) { // 手動四捨五入
AAA++;
}
AAA -= 4
把減4的動作移到最後面再作,這樣就又好了….這什麼道理?
所以…
有遇到程式跑起來很奇怪的時候,試試看先把compile optimize設成-o0吧