這星期真的是忙碌到不行
因為住在外面的房子,合約到期了,所以要搬回板橋的家@@
騎車搬家= =,好累
還好之前已經有陸陸續續的搬東西回家了
今天還把學校跑了好幾遍
主要是辦理離校手續
哈
我集滿印章了
不過我明天才會去換畢業証書吧
這是我的論文的聯結,給有興趣的人參考吧
ps:今天收到女朋友寫給我的畢業賀卡,開心!!!
當然,內容只有我可以看
這星期真的是忙碌到不行
因為住在外面的房子,合約到期了,所以要搬回板橋的家@@
騎車搬家= =,好累
還好之前已經有陸陸續續的搬東西回家了
今天還把學校跑了好幾遍
主要是辦理離校手續
哈
我集滿印章了
不過我明天才會去換畢業証書吧
這是我的論文的聯結,給有興趣的人參考吧
ps:今天收到女朋友寫給我的畢業賀卡,開心!!!
當然,內容只有我可以看
剛從國外回來
頭還有點昏昏的
所以看一點比較可以養神的文章
原來
程式的世界是可以很有效率且有趣的
如果design pattern 可以規劃得好
如果註解可以有doxygon 一樣方便理解
如果寫程式可以和source insight 一樣容易閱讀和撰寫
那麼
一個程式的維護和開發就可以如虎添翼了
有這樣的感觸的原因是:
1、以前的程式只管功能正確就好
2、以前的程式註解只管自己看得懂就好
3、以前的程式流程圖都在腦子裡,想改什麼,就改什麼
未來寫程式給自己勉勵要養成好的習慣
1、先規劃好design pattern
2、程式寫得愈容易懂愈好
3、註解要清楚
4、善用工具
By the way: 我當兵的梯次終於公佈了,830,太好了,第一志願
今天學弟問了我一個有趣的問題
我拿的pic18F4550 的PWM範例
原本是這樣
OpenPWM1(150); //頻率20K
CCPR2L=75; //Dutycycle 50%
可是如果使用到
#include <pwm.h>
寫好的指令後
SetDCPWM1(75*4);
程式要這樣設定,才會dutycycle 才會變成50%
嗯
重新看了一下pic18f4550的datasheet才發現
原來,PIC18F系列 在PWM的模式下,dutycycle會提升4倍的解析度
好厲害的做法
不過可惜的是,我不是很清楚真正提升解析度的做法
雖然我之前用的dsPIC30F 系列 的MCPWM 會提升2倍的解析度
但dsPIC30F寫的就比較清楚了
原來一個簡單的PWM,裡面就有很多有趣的想法和技術在裡面了
之前在學stm32的時候,發現他的註解都很特別
今天花時間看了一下到底為什麼要用這麼奇怪的註解
原來他是使用Doxygen 的註解程式
一開始的時候,我還不是很懂有什麼功能
當我去網路上找到這個程式的介紹後,似乎慢慢的了解了
改了一下範例
/**
******************************************************************************
* @file mac.c
* @author DoubleTime
* @version V3.0.0
* @date 2010/06/16
* @brief This file Doxygen test
******************************************************************************
* @copy
*
*
*
*
*
*
*
*
*
*/
/**
* teset
*
* @param a a is parameter 1
* @param b b is parameter 2
*
* @return a+b
*/
int teset(int a, int b){
return a+b;
}
int kkk;
int main(void){
kkk=teset(4,5);
while(1);
}
執行完Doxygen後,變成網頁式的程式瀏覽,好漂亮,只要副程上有註解的地方,就可以用滑鼠直接點過去觀看註解,超棒的!
Doxygen 也會把屬於它的註解程式刪除,在觀看程式的時候,乾淨利落
ps:不過短時間,我應該不會花太多時間做這樣程式的註解吧!
最近在做的USB測試,Microchip給了韌體和軟體端的範例,所以在學習的過程中也算是順利
這是利用USB HID的類別,每1ms 傳64byte 給電腦端,理想上最大傳輸率應該為1ms*64byte=64Kbyte/s
不過實際在用的時候,每3ms 才會送出2筆,導至平均速率約為64kB/S*2/3=42KB/S
由USB分析儀看到的結果,也是如此,至於為何如,我也很想知道
圖中的50kB/S 是介面最高50KB/S,而不是傳輸速率,我當初一直被騙= =
這是利用USB CDC的類別,模擬RS232,本來我以為可以破100KB/S ,不過只有約62KB/S。
雖然比RS232的速率還快,但似乎也不是很理想,還要再研究看看
圖中的100kB/S 是介面最高100KB/S,而不是傳輸速率
早上看到PIC18F4550有提供Eye pattern的測試
就找了一下暫存器的設定
UCFGbits.UTEYE=1;
就可以玩USB的eye pattern,不過後來才發現,實驗室的示波器沒有這樣的功能
PS:
這次接觸VC++,真的是…… 有難到
或許先把USB放著一陣子好了,先練視窗介面程式好了。不然太多基礎不會了
題外話:
新光保全機器人很久沒玩了
昨天滿腦子的USB的,結果早上5點就起床了orz
一大早的就看了好幾個USB資料,早上果然吸收能力比較強,把一些之前看不懂的,搞懂了
所以今天很早就去學校寫程式了
研究了一下PIC18F4550 USB的stack後,發現寫得很……不是很好懂(或許是我USB的SPEC沒有搞懂),不過大概知道在做什麼
後來想到還有CDC類別的範例程式
所以就又先放下手邊HID的工作,先玩USB的CDC類別
結果,就把範例程式Compiler 燒進去,結果一直抓不到driver
問了李老師,他說他以前用過,沒問題,本來中午吃飽飯要幫我試看看範例的
忘了聊了什麼,結果發現,因為實驗板是李老師設計的,雖然和實驗板相同,但是Crystal不一樣
結果程式改了一下設定,就成功了@@
早上太早起來,頭昏昏的,忘了要改設定,金歹勢
後來研究了一下
利用CDC類別,可以傳到60KB/S
而利用HID類別,可以傳到40KB/S
嗯,至少都比RS232來得快多了(10KB/S),不過就整體而言,其實不是很理想,因為USB滿載可以跑到1MB /S才對
PS:看起來我還是需要學習VC++,範例程式看起來好寞生
最近因為新光保全機器人遇到了一些瓶頸,不管是人或者是製作上的問題
好吧,除了放鬆心情外,在一次偶然的機會,和李老師聊天
嗯,決定往低階的PIC18走,因為範例夠多,學起來比較快
剛好李老師有開課,PIC18F4550,就和旁邊的學弟凹了一塊實驗板,借了一台ICD2,嗯,沒錯,是ICD2,因為我的ICD3借學弟了
不過看了看PIC18F4550,說難用,還挺難用的,說好用,還挺好用的
現在,不方便說太主觀的話
但是對一個學習者的角度來看
學習至上!!!
很快,沒幾天的功夫
我現在可以改USB的HID之韌體(C)和軟體(VC++)的程式了
CCC
改天有空再貼上我在做什麼實驗好了
常常寫程式都需要除錯
可是當不需要除錯的時候
要把每一行除錯的程式都註解掉(節省code size 和 提升執行速度)
這樣超級麻煩的
我以前常常這樣做
很累,很辛苦
最近學了一招不錯用的debug方式
只要設定define,就讓程式可以原封不動的做調整
#include <stdio.h>
typedef unsigned char u8;
#define DEBUG
void assert_failed(u8* file, int line,int expr);
#ifdef DEBUG
#define assert_param(expr) ((expr) ? assert_failed((u8 *)__FILE__, __LINE__,(expr)) : (void)0)
/*******************************************************************************
* Function Name : assert_failed
* Description : Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* Input : - file: pointer to the source file name
* - line: assert_param error line source number
* Output : None
* Return : None
*******************************************************************************/
void assert_failed(u8* file, int line,int expr){
printf("Wrong parameters value: file %s on line %d\r\n", file, line);
printf("data: %d\r\n", expr);
}
#else
#define assert_param(expr) ((void)0)
#endif/* DEBUG */
int main(void){
assert_param(66);
while(1);
}
程式只要有定義
#define DEBUG 的話,那麼就會列印資料出來
如果沒有的話,compiler就會呼略這行程式
題外話
上面的這個程式是會有bug的
當assert_param(0) 時,這樣就不會送出0,而是呼略掉這個指令
就留點作業給大家做看看吧
可以利用這樣的想法,規劃自己的debug程式
ps:有效率的管理自己的程式真的非常的重要