1. C可執行代碼結構 (1)程式碼片段.text:存放CPU執行的機器指令,通常.text是可共用且唯讀。 (2)資料區段.data:.rodata(常量資料)、.rwdata(已初始化全域變數、靜態變數)。 (3)未初始化資料區段.bss:未初始化的全域變數、靜態變數。 (4)棧.stack:存放函數參數、局部變數及任務切換時的上下文。 (5)堆.heap:用於動態記憶體分配。2. 任務結構
轉自:http://zhedahht.blog.163.com/blog/static/25411174200722710364233/ 題目:下面是一個數組類的聲明與實現。請分析這個類有什麼問題,並針對存在的問題提出幾種解決方案。template<typename T> class Array{public: Array(unsigned arraySize):data(0), size(arraySize) { if(size
1、基於同步原語擴充的即時作業系統 在多核處理器的每一個處理器核上都運行一個完全相同的RTOS,然後提供擴充的組件庫,這種組件庫提供相應的同步原語以支援處理器核間的通訊。Eg:VxWorks、RealOS。 通過MP Extended Library同步原語庫擴充,運行在一個處理器核(Processor
轉自:http://zhedahht.blog.163.com/blog/static/2541117420072250322938/ 題目:n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第一個為當前數字本身,第二個為當前數位下一個數字)。當一個數字刪除後,從被刪除數位下一個繼續刪除第m個數字。求出在這個圓圈中剩下的最後一個數字。
Codeblocks經過近兩年的開發,由8.02 升級到了10.5,下面是安裝過程: A.安裝必要組件 sudo apt-get install build-essential sudo apt-get install gdb B、更新源 sudo gedit /etc/apt/sources.list 在末尾添加: deb http://apt.tt-solutions.com/ubuntu/
轉自:http://zhedahht.blog.163.com/blog/static/2541117420072432136859/ 題目:輸入n個整數,輸出其中最小的k個。 例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。 分析:這道題最簡單的思路莫過於把輸入的n個整數排序,這樣排在最前面的k個數就是最小的k個數。只是這種思路的時間複雜度為O(nlogn)。我們試著尋找更快的解決思路。
1. 訊息郵箱Mbox Mbox用於多任務間單一訊息的傳遞,uC/OS-II使用ECB管理Mbox的基本資料,OSEventPtr指向建立Mbox時指定的記憶體空間。事件的建立由具體的事件管理程式實現。主要包含在C源檔案OS_MBOX.C中。OS_EVENT *OSMboxCreate(void *msg);void *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);void
轉自:http://zhedahht.blog.163.com/blog/static/254111742007228357325/ 題目:輸入一個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。 例如輸入整數22和如下二元樹 10 /
SMP系統的實現需要軟體和硬體協同完成。作為硬體來說,組成SMP系統的CPU需要支援處理器間的通訊,需要硬體提供機制來維護CUP之間Cache內容的一致性等;而作為軟體的OS來說,需要配合硬體來實現進程在各個CPU間的調度,處理各種外部中斷等工作。 1、處理器間的同步與互斥
轉自:zhedahht.blog.163.com/blog/static/25411174200712895228171/
作業系統OS 控制和管理電腦軟硬體資源,合理組織電腦工作流程,方便使用者使用電腦的系統軟體。 可將OS看成是應用程式與硬體間的介面或虛擬機器。 OS功能:進程管理、儲存管理、檔案管理、裝置管理、網路和通訊管理等。 嵌入式作業系統EOS 運行在嵌入式硬體平台上,對整個系統及其所操作的組件裝置等資源進行統一協調、指揮和控制的系統軟體。 EOS特點:微型化、可裁剪性、即時性、高可靠性、易移植性
1. memPart基本原理 uC/OS-II根據需要將記憶體空間分成多個記憶體分區,每個記憶體分區由具有相同大小的記憶體塊(Block)組成。主要包含在C源檔案OS_MEM.C中。OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];OS_EXT OS_MEM *OSMemFreeList;memPart控制塊結構體: typedef struct os_men{ void *OSMemAddr; //首地址
Bit-map:用一個bit位來標記某個元素對應的Value, 而Key即是該元素,由於採用了Bit為單位來儲存資料,在儲存空間方面可以大大節省。 假設要對0-7內的5個元素(4,7,2,5,3)排序(假設沒有重複),就可採用Bit-map的方法來達到排序的目的。要表示8個數,只需要8個Bit(1Bytes),首先我們開闢1Byte的空間,將這些空間的所有Bit位都置為0(如:) 然後遍曆這5個元素,首先第一個元素是4,那麼就把4對應的位置為1(可以這樣操作 p+(i/8)|
核心同步措施:為了避免並發防止競爭,核心提供了一組同步方法來提供對共用資料的保護。 Linux同步機制從2.0到2.6以來不斷髮展完善。從最初的原子操作,到後來的訊號量,從大核心鎖到自旋鎖。這些同步機制的發展伴隨 Linux從單一處理器到對稱式多處理器的過度,伴隨著從非搶佔核心到搶佔核心的過度。鎖機制越來越有效,也越來越複雜。 目前,核心中原子操作多用來做計數使用,其它情況最常用的是兩種鎖及它們的變種:一個是自旋鎖,另一個是訊號量。 自旋鎖:專為防止多處理器並發而引入的一種鎖,
轉自:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/ 題目:輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。 在本系列部落格的第27題,我們曾介紹過如何求二叉樹的深度。有了求二叉樹的深度的經驗之後再解決這個問題,我們很容易就能想到一個思路:在遍曆樹的每個結點的時候,調用函數TreeDepth得到它的左右子樹的深度,
1. 應用開發步驟 (1) 包含uC/OS-II的總標頭檔includes.h; (2) 定義任務棧的大小和任務棧; (3) 分配任務優先順序; (4) 實現任務功能; (5) 調用OSInit()函數初始化uC/OS-II的資料結構; (6) 建立使用者任務,啟動uC/OS-II;2. 編寫任務函數 使用者任務函數必須是無限迴圈,程式執行流由OS核心改變。在執行完使用者代碼後最好調用系統服務,主動把CPU使用權讓給有需要的任務。 模式一:
Altera10.1-linux套件包含:10.1_quartus_linux.sh、10.1_devices_linux.sh、10.1_nios2eds_linux.sh 應該說,相較於前幾個版本,10.1在Linux中的安裝已經非常簡單了,只需依次執行上述3個檔案即可~ quartus 和 nios2eds的安裝一般不會出現問題,而 devices 就說不準了,我就卡在這兒了,說是“/bin/sh: can't open 10.1_devices_linux.sh”~
費馬四平方數猜想指出,任意自然數都可以分解成不超過四個完全平方數的和,eg:144 = 122 ,14 = 12 + 22 + 32 現在給出自然數N(N ≤ 60000),希望知道N最少可以分解成多少個完全平方數。 思路(動態規劃):(1) 第一次迴圈找出本身為完全平方數的那些數,標記為 1; (2) 第二個迴圈把由兩個平方數之和,三個平方數之和的那些數標記為 2 、3,沒標記那部分由 4 個平方數組成 #include <iostream>using
1. 先裝XP,再裝Ubuntu,但在啟動時Grub選項中沒有“XP”? 方法一:在Grub介面按“c”進入命令列,然後依次輸入下面命令: (1) root (hd0, 1) //這個根據具體的安裝,可能不同 (2) chainloader +1 (3) boot 方法二:在啟動Ubunt後,通過下面方式進行修改: (1) 在終端運行命令:sudo grub-install /dev/sda (2)
轉自:http://zhedahht.blog.163.com/blog/static/25411174200722991933440/ 題目:定義Fibonacci數列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2 輸入n,用最快的方法求該數列的第n項。