Lambert

@lambert-wu

Joined on Jun 27, 2017

  • contributed by < LambertWSJ > 開發環境 參考作業說明在 Ubuntu 24.04 安裝 gcc, valgrind 等開發工具外,可另外安裝 clangd 作為編輯器的 Language server 來追蹤程式碼。 延伸去年的報告做過的部份 實做 queue 介面 引入 list_sort 並用 gdb 搭配 script 輸出合併過程的圖片
     Like  Bookmark
  • contributed by < LambertWSJ > quiz1 題目連結 測驗 1 按照 list_insert_before 的描述,將 item 插入到串列 l 的 before 前,給定的實做使用指標的指標 p,經過 for 迴圈完後,dereference p 並指派為 item,表示將節點換成 item,item 還需要將下個節點指向 before,因為 item 可能是從別的串列來的,而不是單一節點,因此 item->next 指向的是原串列的節點,而不是串列 l 的 before。 *p = before; item->next = before;
     Like  Bookmark
  • contributed by < LambertWSJ > ==作業說明== 實作 Queue 介面 q_insert_head / q_insert_tail 將節點插入到 queue 的頭尾。可以利用 doubly linked list 的特性簡化成傳入 queue 頭尾的節點,之後再用 list_add 插入新節點。 list_add(node, head): node 插入到 head 後面
     Like  Bookmark
  • 2025q1 Homework1 (ideas) contributed by < LambertWSJ >
     Like  Bookmark
  • contributed by < LambertWSJ > 目標 rv32emu 是針對 RISC-V 32 位元指令集開發的精簡高效模擬器,本任務是引入 JIT 編譯器,以加速 RV32 指令的執行。 2022 年 7 月 31 日在 COSCUP 2022 以〈設計精簡又快速的 RISC-V 指令集模擬器〉為題,發表相關成果。 編譯 RISC-V toolchain $ sudo apt-get install autoconf automake autotools-dev \ curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk \ build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
     Like 4 Bookmark
  • 先按照官方說明將 bootloader, Kernel image 燒錄到板子上,裡面有用到 Tera term 傳送 Flash Writer 到板子上的操作,我不知道如何在 Linux 上面做,所以都是在 Windows 上面用好,確定透過 UART 看 log、下命令,才到 Ubuntu 上面改用 screen 連線到板子上 注意事項: Tinker-V 用到的 glibc 版本為 2.28,如果用新版的 toolchain 編譯出來的 box64 會找不到新版 glibc,執行起來就像下面這樣 root@rzfive-tinker-v:~/tests# ./box64_v2 ./x86/puzzle ./box64_v2: /lib/libc.so.6: version `GLIBC_2.29' not found (required by ./box64_v2) ./box64_v2: /lib/libc.so.6: version `GLIBC_2.33' not found (required by ./box64_v2) ./box64_v2: /lib/libc.so.6: version `GLIBC_2.38' not found (required by ./box64_v2) ./box64_v2: /lib/libc.so.6: version `GLIBC_2.32' not found (required by ./box64_v2)
     Like  Bookmark
  • contributed by < LambertWSJ > ==測驗連結== / GitHub 測驗 1 程式碼填空 [ ] AAA $\to$ item [ ] BBB $\to$ list list_first_entry 要傳入指標的型態還有成員,從而得知 AAA 跟 BBB 為 item 跟 list,目的是從 list 的偏移量(offset) 計算出 item 的地址。
     Like  Bookmark
  • :::info 建議先閱讀〈你所不知道的 C 語言: linked list 和非連續記憶體操作〉熟悉如何使用指標的指標以及如何用在 linked list 上還有 LeetCode 的案例探討,這會使你更好理解這篇筆記 :+1: ::: 旁聽資訊科技產業專案設計錄製作業二的時候選了 easy 的 Merge Two Sorted Lists 以及它的延伸問題 Merge k Sorted Lists,會選 Merge Two Sorted Lists 主要是因為用到指標的指標,Interviewer 應該會想知道 Interviewee 對於指標的理解程度,再加上不斷的 NG 就不斷的重寫,不斷的重寫就覺得重複寫 L1 跟 L2 很麻煩,最終發現 Merge Two Sorted Lists 可以改良的地方,可惜想到的時候影片已經剪完上傳了,同時在自修 2021 Linux 核心設計時剛好在寫的 quiz1,種種機緣巧合之下才想出來這一系列的寫法。 Merge Sort 簡介 Merge Sort 是分治法的經典案例,概念也很簡單,以串列為例,將串列分割成排序好的子串列,再將所有排序好的子串列合併在一起。 digraph G {
     Like 9 Bookmark
  • Tracing JIT 基於以下假設: 程式的執行時間大部份都花在迴圈 迴圈每次都有相似的執行路徑 Tracing JIT 有下面幾個步驟: profile 找出程式中執行頻繁的熱點,紀錄 jump 發生次數超過一定的閥值就進入追蹤階段 tracing
     Like  Bookmark
  • TODO [ ] 整理入門到中階的範例傳到 github,不然這篇不好懂。 初始化 MIR 初始化跟結束分別為 MIR_init() / MIR_finish (MIR_context_t ctx) 當建立好 mir 的物件,可以將要實作的功能包裝成模組(module),mir 會用內建的雙向 linked list 將模組連接在一起,而模組包含了下面這些項目(item) Function
     Like  Bookmark