|Jobs| 系統廠軟體工程師生存守則

  1. 一開始的 domain knowledge 問同事
  2. 環境建置問同事 + 文件囉
  3. Unit Tests 可以幫助你了解這產品做什麼
  4. 了解文件從哪取得
  5. 縮寫很多 要去查出來並理解
  6. 先知道做什麼 -> 看文件與流程 -> 對照 log 去 Trace code
  7. 以事件為單位 去 trace code
  8. 文件盡量直接從原廠找最新的,自己家的設計才是問同事或 PM
  9. 看懂 function pointer, macro
  10. 注意晶片廠自己定義的 structure 與 型別
    例如: bool v.s. boolean
  11. 各層之間傳遞, 都是用 command (message)
    要弄清楚幾個詞的意義與方向:
    Indicator(單純從底層報訊息上來的東西)
    Request(從上層要問底層資訊的)
    Response(底層回給上層的)
    Unsolicited(單方向的發送)
    Solicited(有一問一答的)
    Notification(單方向的發送)

另外,Open source library 使用時要注意權限。

系統廠就是要學會如何用原廠資源兜出客戶要的東西。各種組合出神奇的產品。

Code 兜的好,生存沒煩惱。

|Design| Make a cache in your program.

Cache 原意是指存取速度比一般隨機存取記憶體(RAM)快的 SRAM。
但在軟體中,就是指:暫存的機制。
目的是:降低存取一些值的代價。

你可以不用為了某個值,每次都要去問底層。
或者,某些 indicator 更新太頻繁,但你不希望上層跟著一直做無意義的更新,就會需要一個 Cache (很像 Temp 去接著它)。

 
比較常見的例子:
瀏覽器的 Cache 功能是可以減少你抓取資料的時間。

|NEWS| What is Rich Communications Services (RCS) ?

有錢的通訊服務,提升之後更能從使用者身上刮錢提高使用手機服務的品質。

主要提升三項手機的基本服務:簡訊、電話簿、通話品質。

是說這年代誰還在用手機講電話?

RCS 簡訊,可以直接傳送圖片影音,甚至是完成購物的流程,這樣難道不夠噱錢嗎?

這行為是不是讓我們很熟悉?LINE!!! 最近還開通了轉帳服務呢!

也就是說,到時候可能這些 APP 會跟 RCS 正面衝突呢?

不過,RCS 最重要還是依賴電信商 (Mobile Network Operator,MNO) 支援與否 (因為需要 IMS core system),所以這一天還有一段時間。(軟體服務這邊,Android Framework 這邊看來是提供支援了,那對於手機設備應該難度就大幅降低了)

YouTube:6 0:54 / 1:15 Android Messages: The messaging app built for Android

也許可以整合:SMS (Short Message Service,簡訊服務) 及 MMS (Multimedia Messaging Service,多媒體簡訊)?

BTW. 也就是說,現在在台灣,如果看到手機上有 RCS 可以先關掉或停用 (反正台灣用不了),以免耗電。可以自己打 keywords 問辜狗我在說什麼 XD

 

ref.

GSMA:rcs-documentation

Google’s support for RCS

新一代RCS多媒體簡訊更普及了,Google公布43家支援業者清單,只發簡訊就內嵌購物按鈕!

Wiki – RCS

Google開始部署RCS,Android傳訊服務升級至多媒體 (2016)

|NEWS| 什麼? WiFi 跟 LTE 有可能會干擾?

呃 …… 不要緊張 沒那麼容易啦!

禮拜五有 RF 同事打電話跟我們部門說要測 WiFi(我們部門在此案子沒負責 WiFi),當然要問為什麼阿!聽說是要測看看會不會干擾??!!

 

查了一下,還真的是有可能耶!
Wlan + Bluetooth Channels:2400 – 2483.5 MHz
LTE band 7:2500 to 2570 MHz (UL), 2620 to 2690 MHz (DL)

兩個靠的還蠻近的。
(我只列 FDD 的,參考資料裡面也有列出 TDD)

BTW. LTE band 13 會干擾 GNSS (Global Navigation Satellite System)

ref.

In-Device Coexistence Interference – Rohde & Schwarz

 

延伸問題:TDD v.s. FDD?

最大差異大概就是使用國家:台灣與美國都是 FDD (學把拔,不是很正常嗎?)

ref.

LTE frequency bands

Wiki – LTE-TDD

Wiki – LTE

 

延伸問題:台灣的頻段?

電信商通常會說是多少 Mhz 來表示 LTE 所支援的頻道,

但是手機商通常用 band 來表示。所以最大效益就是:

針對你的門號,去挑選手機(反過來也可以)。

同樣 700Mhz 有 Band 12/13/14/17/28,不過台灣只有亞太有 band 28 …… 以此類推

對照表可以找 Wiki 或電信商官網或是
台灣4G LTE各業者頻寬頻段與使用技術整理比較

|Issue| dlopen ERROR: undefined symbol

我們可以利用 dlopen 載入動態函式庫,然後使用 dlsym 取得裡面的函式來使用。

這兩個方法使用方式可以參考:dlopen&dlsym 用法

有遇到載入失敗,出現:undefined symbol

後面接著一串很像函式名稱的東西。

那時候我猜測是有兩種可能:我函式有問題 (可是 compiler 應該不會過才對),或者,

沒有正確連結?

我使用 nm 去驗證我的想法。

nm 可以列出目標的所有 symbol,看是不是那個函式有在裏面,但有問題?還是那個函式真的沒有在裡面?

在 cmd line 執行:nm -C -D bad_lib.so

就會列出全部的 symbol。其中,-D 指的是察看的對象是動態檔唷!

 

還有一個小工具:ldd 順便介紹一下。

ldd (List Dynamic Dependencies) 可以尋找所使用的函式庫!

執行:ldd (選項) (參數)

就可以列出全部被用到的函式庫啦!

 

ref.

解決 undefined symbol / reference

 

|Issue| 將 .a 包進 .so後,無法使用 .so

Segmentation fault

–whole-archive:可以強制將每個對象包含在生成的共享函式庫裡

所以我把我要包進 .so 的 .a lib 都加上了這個參數

總算可以開啟 .so

*在 static 库中,连接器将停止在第一个符号,即使它是一个弱的,并停止寻找强大的。若要强制它查看所有符号( 就像对动态链接库所做的那样),ld 支持 --whole-archive 选项。

 

ref.

https://ask.helplib.com/others/post_12552910

|Code| Makefile 參數介紹

Makefile 裡面最複雜的就是很多符號以及參數不明白意思。

這邊稍微介紹一下。

跟編譯過程有關:

  • -c:編譯但不進行鏈結,會產生一個跟原始碼相同名字的 .o 檔
  • -O:表示最佳化的程度
  • -g:要包含偵錯資訊

跟連結有關:

  • -l :編譯過程需要一個 library。e.g. -lpthread 表示需要 libpthread.so 函式庫
  • -L:需要鏈結庫外部人家已經寫好的函式的目錄
  • -I : 優先搜尋的 include 檔案路徑

跟包成的目標函式庫有關:

  • -shared:如果目標為動態函式/共享函式庫,一定要加
  • -fPIC:包成動態函式
  • -static:包成靜態函式庫

其他字元:

%.o: %.cpp
g++ -Wall -g -c $^
  • $^:所有的必要條件(%.cpp)
  • $@:工作目標(%.o)
  • %:一個萬用字元,

e.g.:%.o: %.c 這一行,就會知道如果現在的工作目標是 demo.o 的話,就會去找對應的 demo.c

  • $<:第一個必要條件(%.cpp,本例子中只有一個必要條件)

傳遞參數:

  • -Wa : 將選項 (option) 傳給組譯器
  • -wl : 將選項 (option) 傳給連結器

備註:

*編譯不連結,表示只檢查 include 裡有沒有宣告,並不會去相關 lib 找函式真的是否存在

*動態函式跟共享函式差別在於:動態函式程式執行時期並不會去檢查該函式是否存在,而是程式執行到某功能時才進行檢查。

*編譯時,利用 -L 告訴編譯器可以該路徑下尋找 libpthread.so。

若使用了-l,則必須使用的 lib 在預設尋找的目錄中,

保險起見,可以利用 -L 指定多個路徑給編譯器。

ref.

http://maxubuntu.blogspot.com/2010/02/makefile.html

[Linux] 簡單的 Makefile 使用 (% 萬用字元、$@ 特殊符號、.PHONY 假目標)

|心魔| 我是菜鳥嗎?

每次新工作,都是重新當菜鳥。

對團隊來說,我是新來的;對我來說,公司是個新環境,還要適應。

重新摸索:

  • 老闆期望我的表現
  • 如何融入同事

第一次當菜鳥,緊張的原因很簡單:

  • 怎樣才像是個上班族
  • 要記得打卡
  • 要存錢要存錢

其餘也沒什麼大不了,剛脫離學校有問題就問,被笑就算了。

但有工作經驗想的就比較多了:

  • 這個可以問嗎?
  • 這是工作過的人該問的嗎?
  • 怎樣看起來不會像是之前虛度人生
  • 這份工作能為我履歷增添什麼
  • 糟糕,之前都沒做過耶
  • 會不會又是個坑
  • 房貸阿阿阿
  • 之後想要怎樣的生活

我最近的想法是:反正都要彼此摸索與習慣,合就繼續,

不合也沒關係,就是緣份不夠,不用勉強。

別忘記想要過怎樣的生活,其餘努力就好囉!

WordPress.com.

Up ↑