2012年10月30日 星期二

[C#]取得現在日期和時間(DateTime Format String)

在C#中,可以用DataTime取得目前的時間以及日期。
Console.Write(DateTime.Now.TimeOfDay);
21:15:56.0797894
Console.Write(DateTime.Now.ToShortTimeString());
下午 09:16
也可以更進一步用ToString()來把DataTime轉成我們要得格式
Console.Write(DateTime.Now.ToString("HH:mm ss tt"));
21:18 01 下午
大寫HH表示用24小時制表示,也可以改成小寫hh用12小時制
Console.Write(DateTime.Now.ToString("HHmm"));
2118
日期也可以用DataTime取得,以下是範例:
Console.Write(DateTime.Now.ToShortDateString());
2012/10/30
同樣也可以用ToString()轉成我們要得格式
Console.Write(DateTime.Now.ToString("MM-dd-yyyy"));
10-30-2012
Console.Write(DateTime.Now.ToString("ddd dd MMM, yyyy"));
週二 30 十月, 2012

2012年10月26日 星期五

Bit-Banding

什麼是Bit-Banding?

Bit-Banding是一種讓使用者atomic修改memory中某個bit的方法,比如說常見的bit set或是bit clear指令。Bit-Banding把一塊比較大memory中的每個word都對應到一塊較小memory中的每個單一bit,如下圖所示:
上圖把一塊32MB SRAM的每個word都對應到一塊1MB SRAM中的每個bit。其中比較大的memory叫做bit-band alias region,比較小的memory叫做bit-band region。當我們access bit-band alias region中的一個word時,會自動對應到bit-band region的bit。而此Read-Modify-Write的過程被設計成不可被中斷的。因此當我們做bit set以及bit clear時是atomic。

以上圖來說明,當我們把0x23FFFFE0設定成1就相當於把0x200FFFFF的bit[0]設定成1。相反地,當我們把0x23FFFFE0設定成0就相當於把0x200FFFFF的bit[0]設定成0。附帶一提,把值寫到0x23FFFFE0的bit[31:1]是沒有意義的,不會產生任何作用。

Bit-Banding的好處

  1. 減少code size,不需要使用mask對特定bit做修改
  2. 由於atomic的特性,可用來實做mutex以及semaphore

2012年10月18日 星期四

Debug-Later Programming v.s. Test-Driven Development

  • Debug-Later Programming(DLP)
    • Traditional way of programming
    • 設計架構之後開始寫程式
    • 當程式寫完後開始進行測試以及Debug
      • 測試和Debug的過程會佔據軟體開發超過一半的時間
      • late feedback(bug需要花好幾天、數周甚至超過一個月才會讓程式開發者知道)
      • 軟體開發時間拉長,而且難以估計時間
  • Test-Driven Development
    • 在寫程式前先撰寫unit test
      • Tests are small
      • 自動化測試,自動測試是TDD的關鍵
    • 通過所有測試即完成程式
    • 新增功能的步驟
      • 加入一個小的測試程式
      • 跑一遍所有的測資,檢查是否通過所有測項
      • 修改產品的程式碼到通過測項
    • TDD的好處
      • Bug變少
      • debug時間變少
      • 減少發生bug的side effect
      • 測試程式本身就是軟體文件
      • 睡覺睡得安穩,週末不會被打擾
      • 監控專案進度
      • TDD is fun