{"text_format":"2","workbook":"xlsx","n_sheets":2,"sheets":["Revision","工作表1"],"not_rendered":{"charts":0,"images":1,"macros":0,"external_links":0,"defined_names":0,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"run_cost":"one","rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Revision","index":0,"n_rows":10,"n_cols":6,"rows_kept":10,"cut":false,"hidden":false,"merged":[[2,3,5,5]]}
[]
[]
[null,null,null,"Design for Firmware and Software"]
[]
[]
[]
[]
[null,null,"Revision History"]
[null,null,"Rev","Date","Description","Editor"]
[null,null,"01","2018/11/01","First issue","Vern Chang"]

{"sheet":"工作表1","index":1,"n_rows":30,"n_cols":2,"rows_kept":30,"cut":false,"hidden":false,"merged":[[7,1,7,18],[8,1,8,18],[9,1,9,18],[10,1,10,18],[11,1,11,18],[0,1,1,18],[2,1,2,18],[3,1,3,18],[25,1,25,18],[26,1,26,18],[27,1,27,18],[28,1,28,18],[13,1,13,18],[14,1,14,18],[15,1,15,18],[16,1,16,18],[0,0,1,0],[4,1,4,18],[5,1,5,18],[29,1,29,18],[17,1,17,18],[18,1,18,18],[6,1,6,18],[21,1,21,18],[22,1,22,18],[23,1,23,18],[24,1,24,18],[19,1,19,18],[20,1,20,18],[12,1,12,18]]}
["Item","DFx Requirements"]
[]
[1,"沒使用到的 interrupt跟GPIO要確實被disable或初始化,且將沒用到的 interface 設定成GPIO."]
[2,"使用Timer, CAN或I2C通訊功能需用外部Crystal,含確認修正功能,不可用內部RC振盪. "]
[3,"Watch Dog 功能務必要啟動,並檢查沒有任何單一程式處理的時間超過watch dog 設定的時間"]
[4,"考慮到未來軟韌體前後版本使用系統參數表的相容性,在EEPROM/Flash 的參數儲存位置配置採用固定,不可隨意變更"]
[5,"EEPROM/Flash 寫入時,要先比對欲寫入的值與原儲存的值不同時,才執行寫入動作,以確保其生命週期"]
[6,"在撰寫條件判斷式和switch case 時，需注意條件判斷邏輯的完整性\n例如：\na. \n if ()\n else if ()\n else (); //don’t miss ‘else’ statement\nb. \n Switch (x)\n Case 1: break\n Case 2: break\n …\n Case x: break;\n Default: (); //don’t miss ‘Default’ statement"]
[7,"程式內宣告參數值的型態必須與通訊協定上定義的型態要一致，若因特殊情況無法定義一致，則必須在UI設定參數值時，加入檢查輸入的數值是否合乎協定上定義的型態大小，以避免參數值在傳送過程中，發生被裁減(truncate)或溢位(overflow)的錯誤"]
[8,"程式應重新定義integer的size"]
[9,"變數在使用之前要給予適當的初始值"]
[10,"當網路位址設定錯誤時，需具備自動回復前一次設定的機制"]
[11,"Ｗeb 程式須考慮適用於多種瀏覽器，如,IE, FireFox, Chrome …etc"]
[12,"撰寫各個使用者界面(UI)程式時(如LCD, RMS, Web, SNMP …etc)，需要保持所有系統的用語和命名規則的一致性"]
[13,"如有使用embedded OS,請在implement前確認符合該MPU使用的Kernel,用到的Driver及patch file 是否為目前最新版本"]
[14,"Allocate系統資源使用後,如不再使用,請務必釋放,如(alloc,free), (open, close)."]
[15,"若有使用embedded OS,在多工程式下對資源(resource)的配置和存取,要使用mutual exclusion  的方式如Semaphore,來避免彼此衝撞、相互等待的情形發生."]
[16,"使用NTC偵測溫度時, 因為NTC與溫度的阻值變化並非線性,需採用廠商提供之table進行計算,且針對雙邊極值,應給予排除或告警(需考慮到NTC壞掉的狀態)."]
[17,"資料表的欄位過多時, 應切割成兩個以上的資料表, 並用同名的 Primary Key 一對多連結起來, 以避免在存取時載入過多的資料, 或修改資料時造成互相鎖定或鎖定過久"]
[18,"UI 的輸入, 都需要確認內容是否合理 e.x. 英數字、內容長度、空白、null …, 若是輸入無效數值, 則保留原本參數不變"]
[19,"程式迴圈除了main loop外,其他則需要有跳出、停止的條件, 避免無窮迴圈的狀況"]
[20,"資料庫查詢時, 若是不需要全部的資料, 要明確列出篩選的欄位名稱, 不可用 select * from … 的方式將全部資料取回到 client 端再做處理, 造成連線頻寬、記憶體以及 CPU resource 的浪費"]
[21,"資料庫查詢時, where 的條件要明確, 避免將全部資料取回到 client 端再做處理, 造成連線頻寬以、記憶體以及 CPU resource 的浪費"]
[22]
[23]
[24]
[25]
[26]
[27]
[28]