關於車用軟體,什麼是A2L檔案?

A2L是一份描述汽車控制器ECU裡面重要參數的一份重要文件(file_name.a2l)。想想看,例如我們在一般 microcontroller 上面宣告並定義一個常數 constant(C 語言),當程式在運行的時候,constant 都不會被程式給改變,但是我們有時候需要調整這些 constant 到達一些“理想”的數值,而這些數值是在程式開發的時候並不知道,而在原始碼 compile 之後,且燒錄到 microcontroller 之後,在測試實際硬體階段時,才會需要去校正那些需要調整的 constant。如果每次調好之後,再回頭去改 source code,然後compile,再燒錄一次到 microcontroller,就會花費很多時間。有時候沒有source code,我們豈不是無法調整參數?如果能夠不用改 source code 、不用 compile 以及燒錄,直接透過外部傳輸去調整那些參數,而且馬上能看到程式執行那些剛調整的的參數並馬上能看到輸出結果,是不是就很方便呢?

為了能夠讓已經燒錄在ECU的程式透過外部通訊傳輸(例如:CAN)去更改這些 constant,這時候我們就必須把這些 constant 安排到記憶體的一塊區域,我們稱為 calibration area(校正區域),並且紀錄那些constant的memory address、data type、data length、conversion rule,有時候還會需要知道該 constant 能調整的最大和最小範圍。為什麼要記錄這些資訊呢?想想看,在沒有source code的情況下,光憑記憶體儲存的“資料”(可能是code,也可能是data)我們是無法解讀出來的。比如說在記憶題位置 0xa0000000 的資料是 0xff,我們要如何解讀它呢?就算有MAP檔的幫助,我們只能知道在哪些位置上是code,哪些是data,但還是無法知道在 data 地址上的資料要如何解讀(不知道是32bit signed integer還是32bit floating point,還是32bit unsigned integer),不同的 data type,解讀出來的數值可能會天差地遠。為了能解決這些困擾,A2L 檔案負責記錄這些資訊,並在外部通訊傳輸上發揮作用。例如:因為在外部通訊傳輸上(例如:CAN),回傳 0xa0000000 地址的資料就是0xff,我們需要額外資訊(也就是 data type)去解讀這個資料。畢竟,我們不能憑空猜測,0xff 這個資料就是 8bit unsigned integer(也就是 255),對吧?

而為了能夠做測量(Measurement)和校正(Calibration)參數,XCP 通訊協定是一個重要的通訊協定,而 XCP 的 driver 必須連同應用程式一起燒錄到ECU 上。如此一來,ECU 和外部 Tester 才有共同溝通的橋樑。否則 ECU 會不知道,從 CAN 收到的資訊代表什麼。 因此 XCP通訊協定和 A2L 檔案可說是息息相關,除了上述的資料描述資訊之外(memory address、data type、data length、conversion rule等等),A2L還記錄了 XCP 傳輸的資訊,像是CAN ID、CAN 傳輸速度、Seed&Key加密鎖、XCP支援指令等等,A2L的這些資訊也會隨著不同的 ECU軟體的不同而有所改變。可見,A2L扮演非常重要的角色,如果 VW 或是 BMW 把一台車的A2L文件外流到別的競爭對手,這可說是嚴重的機密外洩呢!

常見的一般商用軟體如 Vector 的 CANape 就是應用在測量和校正的應用上。

--

--

就這篇總結一下,這陣子來的對美股期權研究。從Reddit上面不少鄉民都po出自己這次因病毒海嘯,獲得暴利的戰績。身為股市新手,真令人不敢置信,因此開啟了研究鄉民的各種術語。 首先,期權Options一詞,顧名思義就是在約定一個到期日(及到期前),透過權利金買賣一個買賣股票權利的一種交易活動。在美股市場,大部分的股票都有這種附加玩法。也就是說,我們不只是低買高賣股票,或是賣空低價補回,還是買好股票坐等領股利,也可以是藉由買賣一個股票買賣的權利來獲利。以下就介紹四種基本期權交易模式。 期權有兩種權利:買股票的權利(call),以及賣股票的權利(put)。這兩種權利互相獨立。這兩個權力可以買跟賣,所以就是[buy, sell]×[call, put] = 4種可能。首先我們先探討call的部分: 在call的部分:如果你想要一個買股票的權利,你必須要去買,這個去買一個在特定時間以特定價錢買進股票的權利叫做buy call。假設今天02/03在 超微AMD 每股55$,而你覺得AMD今天即將公開發表的產品非常有競爭力,在未來一個禮拜有機會漲超過60$的可能,這時你可以在期權市場用每股3.5$買一個一個禮拜後用56$買進AMD 100 股的合約。3.5$這邊我們稱作合約權利金(premium)。這個權利金的高低影響因素有很多,會因為履約價(ex: 56$, strike price)的高低,或是隨著越接近履約時間,以及這檔股票上下坡動的紀錄,而有所不同。以上述例子,當AMD股價超過56,去履行這個合約才有價值。試想一下,若一個禮拜後,AMD到了62$,我們卻是用56的價格買進,如果當天賣掉,我們即可賺每股6塊的價差。但別忘了,一開始我們卻是有先付權利金3.5$,實際上我們獲利是6–3.5=2.5$。但大家可能會想,既然都是到可能會漲,那何不直接買股票就好?這又關係到投資本金大小:上述的狀況是我們花3.5$,賺到2.5$的例子,也就是約71%投資報酬率。但如果我們是買股票的狀況:(62–56)/56=11%。因為一開始花的本金是62,而不是3.5。若我們預估方向錯誤,AMD不漲反跌,對於擁有這個call合約的投資者,並不會有額外損失,最多就是不去履行這份合約並認賠當初的3.5$的權利金。這裡每個合約最小單位都是100股在算。所以我今天有一張合約要價3.5$,實際上我們必須付出350$去買這份合約。以上這種操作我們稱為buy call。

認識股票期權(Options)
認識股票期權(Options)

這次要說一個故事,一個關於申辦德國信用卡的故事。來德國這幾年,銀行有什麼花招應該都看過,不過這次還真的又讓我破紀錄,為同一件事情跑更多次銀行。 在德國很多銀行,如果需要辦信用卡的話,多半會需要財力證明。而傻傻的我,以為有一個工作合約即可。其實不然。 還記得剛換銀行的時候,從Deutsche Bank換到Commerzbank,覺得人生好像又開始了一次,好像躲過了一個循環利息似的(Deutsche Bank會收每個月約三百台幣的帳戶管理費),錢會越放越少。而Commerzbank並不收帳管費,而且也有開戶獎金。為了為之後累積信用做準備,剛換銀行就想到要辦張信用卡,於是就在開完戶當天約了一個隔周的預約,被叮嚀帶護照跟工作合約。 第一次:預約當天,我開戶的分行沒人上班(有人生病)。然後我就跑到最近的另一間分行。結果,竟然發現,原本幫我開戶的其中一個職員跑來這邊,一問之下才知道,生病的那個沒去上班,導致他不能去原來地方上班,只好跑來分行上班,不過這是題外話。"您好,我是要來辦一張信用卡的,我的那個分行今天關門,但是我有一個預約,您能處理嗎?"。 想說應該能一次能搞定,我已經事先都準備上次職員跟我說的資料。不料,"先生,我們需要你的薪水單唷!工作合約沒辦法證明。"