Friday, October 6, 2017

Cloud Atlas Original Soundtrack

Cloud Atlas Original Soundtrack

一、資訊

電影:雲圖(Cloud Atlas)
配樂作家: Tom Tykwer、Johnny Klimek、Reinhold Heil
發行:Sony Music
CLOUD ATLAS ORIGINAL MOTION SOUNDTRACK

二、心得感想

這部電影其實我沒看過,我當初是因為偶然聽到了這部電影的配樂<Cloud Atlas Sextet>和<Prelude: The Atlas March>後跑去找了這部電影的原著小說來看。這部電影小說的敘事手法十分有趣。她其實六段故事以A-B-C-D-E-F-F-E-D-C-B-A的方式敘述的,而且每段故事時間相差很久,但是前段的故事會有部份連結到下一段,表現出"輪迴"的感覺。當然這種敘事方式拍成電影爆炸機率相當高的,而電影得票房也真的炸了。

如同敘事手法,配樂本身也是有A-B-C-D-E-F-F-E-D-C-B-A的曲目編排。有多首配樂的風格式成對的。不過其中最引人注目的仍是書中提到的<雲圖六重奏>,這首貫串整個故事的曲子。也就是<Prelude: The Atlas March>,之後包括<Cloud Atlas Opening Title>、<Cloud Atlas Finale>、<The Cloud Atlas Sextet for Orchestra>和<Cloud Atlas End Title>,我覺得光片尾幾首曲子的編排與交響編曲,這張專輯就很有收藏的價值了。當然片中的<Templa of Sacrifice>和<All Boundaries Are Conventions>也是我喜歡的曲子。不過剩下幾段的風格我不是很喜歡。

不過這張專輯聽的時候有發現一個問題,最後幾首有時會有不名聲響,我不確定是不是錄音失誤,還是刻意的。

三、曲目

  1. Prelude: The Atlas March
  2. Cloud Atlas Opening Title
  3. Travel to Edinburgh
  4. Luisa’s Birthmark
  5. Cavendish In Distress
  6. Papa Song
  7. Sloosha’s Hollow
  8. Sonmi-451 Meets Chang
  9. Won’t Let Go
  10. Kesselring
  11. The Escape
  12. Temple Of Sacrifice
  13. Catacombs
  14. Adieu
  15. New Direction
  16. All Boundaries Are Conventions
  17. The Message
  18. Chasing Luisa Rey
  19. Sonmi’s Discovery
  20. Death Is Only A Door
  21. Cloud Atlas Finale
  22. The Cloud Atlas Sextet for Orchestra
  23. Cloud Atlas End Title

Wednesday, October 4, 2017

The Imitation Game Original Soundtrack

The Imitation Game Original Soundtrack 

一、資訊

電影:模仿遊戲(The Imitation Game)
配樂作家:Alexandre Desplat
發行:Sony Music
THE IMITATION GAME

二、心得感想

這部電影我本身蠻喜歡的,因為我是資訊背景,這故事本身就有親切感(讀過資工系的或多或少聽過圖零機吧),雖然劇情魔改了Alan Turing的故事,但是改的還算流暢。唯一需要吐嘈的應該就是把發現德軍密碼會有固定內容,而這些內容可以用來剪枝(替除不可能發生的組合)部份改的太戲劇化了。

音樂部份為了呈現Alan Turing數學家的特質,讓音符很離散,很像一群數字在舞動。尤其在<Crosswords>、<Running>、<Decrypting>會有一種問題被拆解被處理的感覺。當然主題旋律<The Imitation Game>和<Alan Turing's Legacy>寫的很有味道。我當初在戲院看到這部電影時有被這兩首曲子觸動。<The Apple>、<Farewell To Christopher>是片中圖靈生命最悲情的時刻,這些悲傷讓我們對圖靈,還有對同性戀的迫害起了反思。

由於我仍是學生,財力不是十分充足,當初看完這部電影後一直去spotify反覆聽這片原聲帶,最後才決定買實體的,以更好的音質品味這張專輯。

三、曲目

  1. The Imitation Game
  2. Enigma
  3. Alan
  4. U-Boats
  5. Carrots And Peas
  6. Mission
  7. Crosswords
  8. Night Research
  9. Joan
  10. Alone With Numbers
  11. The Machine Christopher
  12. Running
  13. Christopher Is Dead
  14. Decrypting
  15. A Different Equation
  16. Becoming A Spy
  17. The Apple
  18. Farewell To Christopher
  19. End Of War
  20. Because Of You
  21. Alan Turing’s Legacy


Friday, September 8, 2017

Arduino TLC5940與伺服馬達

Arduino TLC5940與伺服馬達

TLC5940介紹


TLC5940是TI的16 channel LED驅動晶片。可以支援同時16通道的PWM灰階輸出,解析度為4096階。同時有兩種模式 12 bit (4096 Steps) Grayscale PWM Control 和 Dot Correction。

重要參數:
供應電壓:Vcc  => 3V ~ 5.5V
操作界面:Serial Data
資料傳輸速率:~30MHz
LED可驅動最大電壓:~17V
LED可驅動電流:0~60mA(Vcc < 3.6V ) 0~120mA(Vcc > 3.6V)

由於是輸出PWM,也可以拿來做PWM擴充。所以也可以拿來推Servo摟。

TLC5940 Ardunio library

在Ardunio IDE中可以透過library manager找到。而github上也有連結:

TLC5940電路接法

以下以PDIP封裝的TLC5940為例還有使用Arduino Mega2560。
TLC5940 Ardunio Mega2560
SIN(pin 26) MOSI(pin 51)
SCK(pin 25) SCLK(pin 52)
XLAT(pin 24) OC1A(pin 11)
BLANK(pin 23) OC1B(pin 12) + 1K ohm上拉電阻
GSCLK(pin 18) OC2B(pin 9)
VPRG(pin 27) VPRG(pin 50) or GND
XERR(pin 16) XERR(pin 10) or GND
SIN(pin 26) SIN(pin 51)
IREF(pin 20) 1K ohm下拉電阻
VCC(pin 21) 5V
GND(pin 22) GND

至於out0到out15的接法比較特別。
這樣即可完成Servo與TLC5940的電路。

程式部份

這部份可以直接使用範例。來做實驗。開啟方式:
Ardunio IDE-> Files-> Examples -> TLC5940 -> Servo


深入探討Ardunio TLC5940 library


  1. pinout
    pinout部份在library中的pinout中可以找到,包含各種Ardunio板子。
    這些腳位是不能隨便更改的,因為library使用了Arduino的硬體週邊做加速。
    EX: PWM SPI等。
  2. Serial Data
    Serial Data有兩種模式:
    1. SPI:因為Serial Data shift-in的方式其實就是SPI的MOSI和SCK腳位在做的事。
               所以透過SPI可以加速資傳輸速率。溝通方式可以在http://www.ti.com/lit/ds/symlink/tlc5940.pdf中見到。
    2. bit-bang:直接對GPIO操作(產生SCK的clock和data)來傳輸資料,只是較慢,但可以更換腳位。
  3. GSLCK XLAT與blank
    這裡是利用Ardunio的硬體pwm(output compare pwm)來辦到的,以GSCLK為例,她產生4096*50HZ的clock(4096為解析度,50為Servo是20ms一個週期)。在透過XLAT(鎖住更新資料),blank清除GS counter。

Thursday, September 7, 2017

STM32 LCD 使用 BSP 與STM32CubeMX

STM32 LCD 使用 BSP 與STM32CubeMX


本文以STM32F469NI Discovery為範例。目標是以STM32F469的BSP lib操作STM32F469 Discovery的TFT-LCD。

STM32CubeMX configuration

先將周邊開啟如以下設定。

LTDC : LCD-TFT Display Controller,硬體優化的LCD控制介面。
DSIHOST: Display Serial Interface Host,由MIPI alliance建立的行動顯示protocol。提供高速的LCD framrate。
DMA2D : Chrom-Art Accelerator™ 用來做圖像操作的DMA,可以做出限定範圍的填滿等記憶體操作。適用AHB bus,可以將結果導入AHB slave端(DSI HOST)。
RCC : LTDC , DSI HOST需要時序。
I2C : 觸控需要。(stm32f469_discovery.c需要I2C)。
FMC : 用BSP時可以選擇使用SDRAM存儲資料。


時脈控制,由於開啟HSE,所以DSI有了clock source。(這部分要注意STM32CubeMX產生出來的程式碼是否會讓clock超過硬體限制)。
選擇RGB565為color mode。
Pixel format選用ARGB8888。


引入Driver

在專案資料夾下的Drivers/BSP/Components/otm8009a 中,將該路徑下的otm8009a.c 加入keil專案。otm8009a為STM32F469_Discovery上的觸控顯示螢幕。
在專案資料夾下的Drivers/BSP/STM32469I_Discovey中,將該路徑下的stm32469i_discovery.c、stm32469i_discovery_lcd.c、stm32469i_sdram.c加入keil專案中。
去下載STM32CubeMX STM32F4 firmware link: http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-embedded-software/stm32cubef4.html
解開來,將Utilities資料夾放入project根目錄。

新增好的檔案架構如下。
在options for target -> C/C++ -> include path中加入那兩個資料夾。如下:

程式撰寫

main.c中include "stm32469i_discovery_lcd.h"
其中的初始流程為:

  1. 初始化LCD =>以BSP_LCD_Init()
  2. 選擇LCD layer => BSP_LCD_SelectLayer()
  3. 啟動LCD => BSP_LCD_DisplayOn()
剩下繪製部分所提供的函式都在stm32469_discovery_lcd.h中。
不過功能僅有基本。

成果


Monday, September 4, 2017

STM32CubeMX初探

STM32CubeMX初探

STM32CubeMX是code generator(程式碼產生器),與Microchip code configurator一樣。目標是用圖形化方式規劃MCU的外部模組與內部Middlewares設定。我個人覺得使用STM32cubeMX可以讓整個開發更加"工程化",產生的專案會更有組織。

一、安裝與更新

安裝網址如下:http://www.st.com/en/development-tools/stm32cubemx.html

下載完成後,桌面會產生兩個icon,一個是STM32CubeMX,一個是STM32CubeUpdater。
開啟STM32CubeUpdater,選擇所需的STM32系列library,即可完成相依library建設。更新也是透過此工具。

二、基本使用(以STM32F469NI_Discovery為範例)

開啟STM32CubeMX,選擇New Project->選擇晶片或是開發版即可進入。如下圖畫面。

# pinout


左邊為周邊模組(peripheral)綠色為已經啟用。左邊為腳位設定(綠色為已規劃,橘色為開發版已經硬體連接的腳位但未啟用)。左鍵點選腳位可以開啟小選單選擇所需腳位定義。
透過上方tab進入進階規劃。

#Clock Configuration

這個tab將STM32的所有時序和PLL、prescaler列出整理成流。
幾乎所有設定都可以修改。後方藍色框框中可以直接鍵入所需Clock值,系統會幫你調整整個流。當然有硬體限制,STM32cubeMX會提醒你,當你出現錯誤設定會有警示。


#Configuration

這個tab將前面所開啟的周邊模組列出,每個都可點選以進階設定。更詳細的設定之後文章會介紹。

#power consumption calculator

這個tab可以幫助計算能源消耗,還可以計算各個環境下的情況(就是把datasheet後面的數據列出),不過無法計算開發版的能源消耗,僅限晶片本身。

# project Settings

點選上方menu->Project->Project Settings,開啟以下專案設定。
基本上就按照環境選了。不過這裏特別提一個選項,我覺得對後續開發很以幫助。
紅框中選項可以將周邊裝置的初始化函式(以MX_為前綴的函式)產生成獨立的.c/.h配對,避免全部Init函式都在main中,造成main function很肥大,而且當你有多個source檔(並非主要程序都集中在main.c)時,可以讓其他函式更方便引用這些初始程序。


#產生Project與報告

紅框中這兩個東西可以產生Project 與報告。

#結果與檔案樹(以ARM MDK keil為例)


User裡面是初始化函式和main.c。可以發現main.c中有一堆USER code begin和USER code end的註解,這些註解是希望user將自己的code加入其中,因為如果要重新使用STM32CubeMX產生code到同一專案時,可以確保user code不會被覆蓋。

Drivers/STM32F_4xx_HAL_Driver是STM官方在推的HAL函式庫,現在的主流,這部分引用都是由STM32CubeMX完成,其中若是想要自行開啟周邊模組,可以在這個資料夾中的stm32f4xx_hal_conf.h中解除註解或新增註解(外面檔案樹的Inc中)。若有新增模組需要手動將該周邊的HAL的.c新增進專案中。

# 小結

STM32CubeMX的有點是可以讓開發工程化,開發速度加快,可以用高層級的方式思考整個系統架構,而且不用去一直翻閱datasheet(最好還是要了解整個周邊的架構與使用)。

缺點是一些官方套件,例如:STemWin和BSP要自行新增進入專案中,有點可惜。

Thursday, July 13, 2017

C/C++中避免unused variable造成報錯的方法(void cast of argc/argv)


一些Signal handler或是Thread(CMSIS-RTOS)的建立會要求你的的函數強制吃一些argument。

當你的compiler開 -Werror -Wall -Wunused-variable選項時,這些未被使用的變數會報錯。

這時有兩個解法。

1.void cast

例如:

void f(void * argc)
{
         (void) argc;
}

這會無害的去用到這個變數。


2.自己等於自己

例如:

void f(void * argc)
{
         argc = argc;
}

這兩招就是欺騙compiler這些變數已經被使用。

我第一次看到這寫法真的嚇到了。

以下是stackoverflow的討論。
https://stackoverflow.com/questions/21045615/what-does-voidvar-actually-do
https://stackoverflow.com/questions/8052091/void-cast-of-argc-and-argv?rq=1

Sunday, July 9, 2017

A Narrative History of BSD 心得

A Narrative History of BSD

這篇文為我修課時做的心得,由於原文是用hackmd寫的,在這裡版型會有差異(原文)
  • 什麼是BSD
    • 全名:Berkeley Software Distribution(柏克萊軟體套件)
    • 類型:作業系統(UNIX-like)
    • 創立者;Bill Joy
    • 程式語言:C
    • license:BSD license
    • 描述:常用於工作站與伺服器
    • 下圖為UNIX譜系
  • 全片大綱
    以下是以影片中Dr. Kirk McKusick的解說分段。
    • Bill Joy Era
      • 在柏克萊大學建立
      • Bill Joy時期(1BSD,2BSD)納入的軟體套件:EX(vi),pascal interpreter,C Shell
    • TCP create
      • BSD 4以後的TCP/IP建立
      • BNN與柏克萊團隊的衝突
    • lawsuit of license
      • 與AT&T的著作權問題
  • BSD歷史與<A Narrative History of BSD>提及的對照
    以下是BSD的歷史與影片中的內容相互參照。
    • 1BSD
      • 釋出:1978年
      • 由Bill Joy創立,從早期貝爾實驗室的UNIX改寫而來
        原本是Bill Joy對AT&T的UNIX進行修改,雙方彼此間是合作關係,後來Bill Joy版本與AT&T差異加大,Bill Joy因此打包釋出1BSD
      • 加入ex(vi前身)、Pascal等
      • 執行環境:PDP-11
    • 2BSD
      • 釋出:1979年
      • 主要仍由Bill Joy開發(後期版本,如:2.9、2.10、2.11等多由別人改寫)
        這些後期版本的釋出時間比3BSD來得晚多是針對在PDP-11下的BSD進行維護與修改,甚至在2.9BSD納入了一些4.1cBSD的code。
      • 加入vi、C shell、Network package(Berknet、區網服務)
      • 執行環境:PDP-11
    • 3BSD
      • 釋出:1979年
      • 柏克萊團隊合作撰寫
      • 主要是將BSD port到VAX
      • 這版的BSD開始受到DARPA(美國國防高等研究計劃署)的重視,要求柏克萊成立CSRG(Computer Systems Research Group)來維護BSD。
        • DARPA開始注重BSD的原因是因為當時美國國防部底下的協力廠商使用太多種程式語言與環境,造成統合困難,所以選用BSD。
        • BSD當時效能超越AT&T發行的UNIX,不過因為BSD內含AT&T的程式碼,所以在當時很多購買AT&T license然後使用BSD。
        • VAX + VMS(IBM建立的作業系統)與VAX+BSD的競爭
          VMS的效能測試(micro benchmark)原本都比BSD好(pipe、取得PID、ping等),後來Bill Joy等人修改至相同(4.1BSD)。另外由於BSD的可移值性比較好所以獲得DARPA青睞。
    • 4BSD
      • 釋出:1980年
      • 特色:Job Control、deliver mail、PRAM’list(待查明)、Curses library(ncurese前身,terminal的控制函式庫)、Signal
      • 開始受到DARPA注資
      • 執行環境:VAX
    • 4.1BSD
      • 釋出:1981年
      • 效能改善
      • 4.1a BSD:
        當時DARPA請BNN(Bolt, Beranek and Newman ,BBN Technologies前身)與柏克萊團隊來實做TCP/IP協定,柏克萊負責介面(socket、connect等),BBN負責底層實做。由於Bill Joy進度超前,所以他向BBN的此專案領導Rob Gurvitz要了些雛型程式,並做了Rlogin與RCP在VAX 750上測試,多次測驗後達到該測試環境的上限表現。而這些進度後來納入了4.1a BSD中。
      • 4.1b BSD:
        • 後來Samuel J Lefflerr加入CSRG,並改寫TCP/IP介面,使得4.1b BSD可以開始支援多個連線。(主要修改為,當建立連線後會回傳一個新的socket,而不是同一個socket重複使用)。
        • 另外影片講者Marshall Kirk McKusick也協助開發新的檔案系統Berkeley Fast File System。
      • 4.1c BSD:修改完Signal後,成為4.1中散布最廣版本。
    • 4.2BSD
      • 釋出:1983年
      • Bill Joy離開建立Sun公司,Mike Kareks加入
      • 納入更完整的TCP/IP程式,造成柏克萊團隊與BBN的紛爭
        由於BBN的程式未被納入,影響其聲譽,所以釋出可自行編譯版本的TCP/IP程式,造成是市面上有兩種TCP/IP程式實做的BSD,最後在效能評估上由柏克萊團隊勝出,所以4.3使用柏克萊的TCP/IP。
    • 4.3BSD
      • 釋出:1986年
      • 實做OSI分層、對虛擬記憶體系統改善
      • 用BSD license發行不含AT&T license的BSD,也就是NET/1(Networking Release 1)。
        趣事:柏克萊釋出NET/1有兩個管道,一是用1000美元購買實體版,二是透過網路下載,結果由超過千人付錢購買。
    • NET/2
      • 釋出:1991年
      • 柏克萊認為他們的BSD已經與AT&T的UNIX原始碼完全不同,所以以低價開始釋出NET/2,但也因此激怒AT&T,造成了BSDi與AT&T得訴訟。
        最後雙方和解,柏克萊針對有問題原始碼做修正
    • 4.4BSD
      • 釋出:1994年
      • 訴訟結束後的clean code與一些修正所作的釋出。
    • other distribution
      • freeBSD,NetBSD等社群版本。
  • 名詞解釋與補充
    • ZFS lawsuit
      • 時間:2007年
      • 雙方:NetApp , Sun(Oracle)
      • 內容:NetApp控告Sun開發的自由軟體ZFS(常用於freeBSD、BSD上,擁有snapshot功能的檔案系統)侵權,Sun後來也反訴回去。
      • 結果:和解收場
      • 其他:Sun贏得訴訟後,將ZFS技術帶到linux,變成Btrfs。
    • Sun lawsuit
      • 影片中Dr. Kirk McKusick提到其為Sun lawsuit專家,指的可能為Sun在JVM上的訴訟。
      • JVM lawsuit:
        • Sun vs Microsoft
        • 爭端源於MSJVM(微軟開發的JVM)
        • 結果為和解,但Microsoft結束MSJVM開發
  • 心得
    • 這影片的資訊量有點大,因為Dr. Kirk McKusick他把三小時課程壓到50分鐘內說完,而且幾乎完整敘述了BSD的歷史,還有在這歷史中衍生的TCP/IP開發事件與BSDi和AT&T的法律訴訟。從這個BSD的歷史,可以了解BSDi與AT&T訴訟的源頭。而從UNIX分出來的BSD最後也影響整個資訊產業生態。BSD對於可移植性的要求,也讓BSD仍存活於世上。
    • 我覺得Dr. Kirk McKusick對於Bill Joy的描述很有趣。他形容Bill Joy是一個可以快速找到處理一件事情的最短路徑,程式寫的很快,問題一下就解決了。不過他的code有點亂,所以需要後人的維護。沒想到早年的程式設計大師也有程式碼不易維護的問題。
    • Dr. Kirk McKusick好喜歡用at any rate這片語喔,整片大約說了50幾次吧。
  • Question
  • BSD前期(1BSD、2BSD、3BSD)的license採用BSD license與AT&T license,這個混亂的授權是AT&T許可的嘛?
  • 為什麼BSD開發到BSD 4.4 lite2就停了?變成其他發行版本?
  • DARPA為什麼會讓柏克萊以開源釋出BSD,而不是讓這些變成國防部的祕密武器?
  • 有些縮寫如PMAC、PRAM找不太到只得是甚麼

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...