contributed by < Rsysz
>.
sysprog
首先必須先了解 Character Device
程式的結構與原理,接著才看內部數值計算方式,了解完 Dev
的使用方式後,這邊先看到 main.c
內的 calc
,這邊使用到了 struct expr
這個結構體與 expr_create
對其初始化
static void calc(void)
{
struct expr_var_list vars = {0};
struct expr *e = expr_create(message, strlen(message), &vars, user_funcs);
if (!e) {
pr_alert("Syntax error");
return;
}
result = expr_eval(e);
pr_info("Result: %" PRIu64 "\n", result);
expr_destroy(e, &vars);
}
再來看到 expression.h
與 expression.c
內定義了對應的結構體
struct expr {
int type;
union {
struct {
uint64_t value;
} num;
struct {
uint64_t *value;
} var;
struct {
vec_expr_t args;
} op;
struct {
struct expr_func *f;
vec_expr_t args;
void *context;
} func;
} param;
};
/*
* Functions
*/
struct expr_func {
const char *name;
exprfn_t f;
exprfn_cleanup_t cleanup;
size_t ctxsz;
};
struct expr_func *expr_func(struct expr_func *funcs, const char *s, size_t len);
/*
* Variables
*/
struct expr_var {
uint64_t value;
struct expr_var *next;
char name[];
};
struct expr_var_list {
struct expr_var *head;
};
struct expr_var *expr_var(struct expr_var_list *vars,
const char *s,
size_t len);
如下圖所示
GitHub/MBP-bluetooth patchGitHub/MBP-sound driverGitHub/bluezGitHub/bluez-alsaGitHub/Bluez-GATT-HID-Keyboard-Emulator-ExampleGoogle Git/Fluoride
May 9, 2025{%hackmd theme-dark %} DPDK GitHub-DPDK GitHub-Pktgen-DPDK OpenNetVM GitHub-openNetVM
May 27, 2021{%hackmd theme-dark %} Server Hardware Dell PowerEdge R240 1U * 2 Laptop * 1 Hardware Info $lshw -class network -businfo //check PCI
May 24, 2021contributed by < Rsysz > Gameboy 模擬器 GitHub Intro 首先根據老師給予的 jitboy 內的描述,了解到當前模擬器有兩種較常見的實作方向。 一是模擬 Game boy 的環境,就能讓舊有的 ROM 順利執行,但缺點就是因 CPU instruction 不兼容,因此須將指令逐行翻譯,採用靜態編譯,因此 branch miss 將無法避免 第二種便是透過 JITcompiler 達成動態編譯,也就是在執行期才對下段指令編譯,因更好的效能而為多數模擬器所採用,相對於前者更消耗資源
Mar 19, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up