contributed by < nickyanggg
>
linux2020
FSHIFT
為定點數的小數位數,這邊為 11。FIXED_1
用來將數字轉為定點數,或者是用來處理定點數乘除法的修正。EXP_{i}
代表第 i 分鐘的平滑常數 (以定點數表示)。main
expr_create
並將算式 s
轉成 expression data type (expr
)。expr_val
來把儲存好的 expression data type 計算出結果。expr_create
expr_next_token
來抓取下一個 token 的位置。if else
block,並用對應到的結構儲存。expr_eval
&e->param.op.args.buf
中的二數做運算。main
,或是其他也被歸類到運算符號的值,也會有相對應的呼叫處理。name
為函式名字。f
為函式的地址。而在上面的 main
中,除了傳入整個表示式 s
之外,user_funcs
也會一起被丟入 expr_create
中,為了就是在之後呼叫 expr_func
來比對表示式 s
中是否有出現自訂義的函式。
while
這個 block 並沒有考慮 n1
< 0 的狀況,所以會一直乘以 10 直到 overflow 並且大於 ((1 << 25) - 1)
才跳出迴圈。n1
再轉換成其他定點數的值才不會出錯。if (n1 < 0)
的 block 即可。NUM
、FRAC
overflow 問題。FP2INT
並重新觀察它的 FRAC
是否合理,若不合理則是發生 overflow。a
、b
為合理結果。mult
處理 FRAC
overflow 的方式一樣。a
、b
為合理結果。a
、b
為合理結果。main.c
和前面 MathEx 實作自訂函式方式一樣。
修改 test.sh
,並觀看 dmesg
結果,結果如預期一樣。
livepatch-calc.c
n
為 fixed-point,因此作運算前要先轉換。livepatch_fib
來myfib
。回頭看 Livepatch 運作機制,不是透過「覆蓋」,用語要精準
驗證後,結果沒有問題。