原创 uboot移植第三天——代碼分析(3)

uboot中start.S相關代碼分析 重定位 ——即把falsh中的代碼複製到ram(sdram)中,本開發板複製到sdram中。 不管我們開發板是以什麼方式啓動(nor/nand)啓動,都需要進行重定位 因爲: 當nor

原创 linux線程學習(5)

線程的高級屬性 1. 一次性初始化: 有些事需要且只能執行一次(比如互斥量初始化)。因此有了使用一次初始(pthread_once_t); 首先要定義一個pthread_once_t變量,這個變量要用宏PTHREAD_ONCE_

原创 linux線程學習(3)

線程的同步 1. 互斥量 爲什麼要使用互斥量: 當多個線程共享相同的內存時,需要每一個線程看到相同的視圖。當一個線程修改變量時,而其他線程也可以讀取或者修改這個變量,就需要對這些線程同步,確保他們不會訪問到無效的變量 互斥鎖的

原创 單片機兩大延時方法總結

實現延時通常有兩種方法:一種是硬件延時,要用到定時器/計數器,這種方法可以提高CPU的工作效率,也能做到精確延時;另一種是軟件延時,這種方法主要採用循環體進行。 1 使用定時器/計數器實現精確延時 單片機系統一般常選

原创 linux線程學習(6)

1. 線程私有數據 應用程序設計中有必要提供一種變量,使得多個函數多個線程都可以訪問這個變量(看起來是個全局變量),但是線程對這個變量的訪問都不會彼此產生影響(貌似不是全局變量哦),但是你需要這樣的數據,比如errno。那麼這種

原创 關於C語言數量類型的轉換

今天做了幾題關於C語言數據類型轉換的題目,感覺自己是懂非懂,於是決定在研究研究。 首先,C語言數據類型的自動轉換遵循以下規則(這是經常用到的,還有其他規則這裏沒有寫齊全,可自行百度): 若參與運算量的類型不同,則先轉換成同一類型(更高的

原创 poll機制之內核實現簡要分析

int poll(struct pollfd *fds, nfds_t nfds, int timeout); 意思就是說poll函數功能類似select函數,即等待文件描述符可進行I/O操作,比如數據的讀寫,標準輸入之類的。文件描

原创 關於C語言中結構體對齊問題

嵌入式C語言之struct內存分配(對齊) 爲了提高CPU的存儲速度,對一些變量的起始地址做了“對齊”處理。在默認情況下,規定各成員變量存放的起始地址相對於結構的起始地址的偏移量必須爲該變量的類型所佔用的字節數的倍數。同時爲了確保結構的

原创 字符設備驅動學習(1)

首先,以查詢方式的按鍵驅動開始字符設備驅動的學習。 目的:按鍵驅動查詢方式獲取按鍵值: 1、寫出驅動框架 2、硬件操作,相關實現。 一.寫出框架:對於驅動的學習,框架思想非常重要 1.1.file_operation: file

原创 字符設備驅動學習(2)

學習目標:在字符設備驅動學習(1)的按鍵查詢基礎上改爲按鍵中斷。 1、什麼是中斷 中斷是異常的一種,異常就是可以打斷cpu正常運行流程的一些事情,比如外部中斷、未定義指令、swi指令。cup暫停當前的程序,先處理異常事件,然後再繼續執行

原创 嵌入式Linux內核啓動參數介紹與設置

軟件子系統各組成部分之間的層次與關聯,怎樣相互識別、配置與加載? 一、系統啓動流程 bootloader(uboot) ————> Linux Kernel(uImage) ————> Rootfs(Init) ————> Applic

原创 C++——運算符重載

運算符重載 運算符重載基礎:運算符重載就是對已有的運算符賦予新的含義,實現新的功能。<<是C++中的左移運算符,但是在輸出操作中與cout配合被稱爲流插入運算符,可以進行輸出。>>是右移運算符,與cin配合使用被稱爲流提取運算符。它們都

原创 網絡編程小練習

實例:多併發服務器小程序練習:編寫一個服務器,可多個客服端進行對齊同時訪問。採用多進程的方法實現。 功能:服務器端打印接收的字符串長度,和字符串,客服端ip,以及使用的端口,將服務器接收到的數據會送給客服端,當接收到q時,服務器就與客服

原创 linux內核中2410_gpio_cfgpin函數分析

2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPIO_OUTPUT) 函數分析:作用設置相應GPIO口的工作模式,輸入、輸出、中斷等。 一,首先宏展開:爲方便描述,展開後用等號表示 #define S3

原创 嵌入式工程師面試題——常見字符串編程小題目

寫一個程序,從鍵盤輸入字符,然後對字符進行逆序操作 //採用遞歸的方法實現 void myprint(char ch) { if((ch = getchar()) != '#') { myprint(c