IPad Pro 生產力 邊看網頁 邊筆記 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 - 6月 20, 2020 如何在ipad pro 邊看網頁 邊做筆記 (ipad os)Safari選取(標示)後就可以開使做筆記.最後再選則存成pdf檔案,日後就可以用再複習編輯。 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 留言
Raspberry Pi (ARMv6)上自幹一個微小作業系統 - 3月 21, 2015 大約半年前,我加入fb的F9 based JuluOS與黃敬群老師( Jserv) 成大嵌入式系統課程社團,我才發現原來台灣有那麼多人在研究作業系統開發,我也想試試開發一個小小的OS。 從0開始寫一個OS是相當有趣的過程,可以檢視自己對C、資料結構、作業系統、計算機組織的瞭解程度,誠實的面對自己,雖然自己在系統廠工作幾年了,還是很多基礎知識不足,也許這就是為什麼那麼多高手可以在ic design house,而我在系統廠吧,寫這個小OS,只是學習的開始,接下來我會多研究其它的OS,例如:xv6、F9 microkernel、freeRTOS... 我把開發流程一步一步記錄,從bare metal Helloworld,加入printk,配置MMU, IRQ中斷,記憶體管理(Buddy system),到最後加入system call、process fork與round robin scheduling,方便學習。 所有原始程式碼都放在github上: https://github.com/tzuCarlos/RaspberryPi 我使用qmeu測試: 這邊有執行的結果: https://github.com/tzuCarlos/RaspberryPi/blob/master/mimiOS/RESULT 系統說明: 先拖稿一下,下班還要唸書,顧嬰兒很累的,改天有空補上一步步說明XD 未來工作: 1.把ARM的架構跟ARM組合語言弄熟。 2.系統memory map我還沒好好規畫,只是想到做什麼功能,就找一塊出來。 3. 沒有檔案系統,沒有shell、沒有驅動程式構架。 ... 閱讀完整內容
自己動手做OS之Raspberry Pi MMU initialization. - 11月 19, 2014 寫了一個簡單的bare metal啟動MMU的程式, 把實際位址0x20000000~0x210000000 對應到虛擬位址0xa0000000~0xa1000000 ARM MMU的部份在ARMv6之前跟之後的版本不同, 請看Technical Reference Manual。 Raspberry Pi MMU initialization example. hackpad note:https://lbd.hackpad.com/MMU-initialization-Jl8YoJ3iUdf source code:https://github.com/tzuCarlos/RaspberryPi/tree/master/labMMU 為什麼需要MMU? TODO:.... 頁表(page table)是由頁表項(page table entry, PTE)組成的 。 每一個PTE包含一段虛擬位址(page)映射到一段實體位址的資訊,而page的大小依ARM core版本不同,有不同的支持1K(tiny page), 4K(small page), 64k(large page), 1MB, 16MB。 page的大小決定了映射的粒度(granularity): 如果我們把page切1MB,那64MB的記憶體就需要64MB/1MB的PTE,每個PTE是32bits(4bytes),64x4=256bytes頁表項空間。4G就是4096x6=16384=16K 切1K,4K,64K需要用二級查表,1MB,64MB用一級查差,二級差表用途是縮小PTE,以減少佔用記憶體空間,但降底了尋址的效率。 16M的page叫super section, 1M的叫section。 L1表還有個名稱叫page directory entry(PDE)。 ARM 的位址轉換涉及底下三種位址[1]: 虛擬位址 (Virtual Address,VA): CPU 送出的位址。 修改後的虛擬位址 (Modified Virtual Address,MVA): 快取和 MMU 看到的是 MVA。 物理位址 (Physical Address,PA): 內存看到的是 PA。 ... 閱讀完整內容
C語言,大數運算,階層筆記 - 6月 26, 2014 如果今天要用C語言計算50!,int都是不夠用的。 要解這樣的問題,必需要用陣列。 32位元系統unsigned int 最大 4,294,967,295 (10位數字) 64位元 uint64_t 18,446,744,073,709,551,615 (20 位數字) /*從array的高位元開始存值*/ void Big_factorial_iteration(int n) { int i=1; /*init array*/ int a[SIZE_A]= {0}; int tail=SIZE_A-1; a[tail]=1; for(i=1; i <= n ; i++) { int j; /* multiply the value */ for(j= tail ; j >= 0 ; j--) { a[j]=a[j]*i; } /*進位留下個位數,其餘的加點前一位 */ for(j= tail ; j >= 0 ; j--) { if (a[j] >= 10) a[j-1]=a[j-1]+(a[j]/10); a[j]=a[j]%10; } } for(i=0; i< SIZE_A ; i++) { printf("%d",a[i]); } printf("\n"); } int main() { printf(" %d \n",factorial_recursion(10)); printf(" %d \n",factorial_iteration(10)); Big_factorial_iteration(20); 計算20階層 } result: [carlos@localhost c_examples]$ ./factorial_2 3628800 3628800 000000000002432902008176640000 原始碼: https://github.com/tzuCarlo... 閱讀完整內容
留言