Time of Update: 2018-12-03
Ubuntu10.10預設是沒有安裝g++的,所以在很多源碼安裝時,都會在configure時提示g++命令未找到,這裡介紹下我在Ubuntu下安裝新版gcc的經驗,下載gcc-4.5.3安裝,過程中會提示如下gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC
Time of Update: 2018-12-03
這個是在網上看的,感覺個人也有好幾個這樣的缺點,最明顯的就是第一點了,經常把大把的周末時間浪費掉了。不過還好還年輕,轉下此文,連結也都保留以便查閱,當做警示吧! 英文原文:5 top non-technical mistakes made by programmers(備用連結) 一個好的軟體開發人員需要培養兩種技能:技術技能和非技術技能。不幸的是一些開發人員只注重技術的部分,以致養成一些陋習,下面是最常犯的5個非技術性錯誤: 1. 缺乏自律 Jim
Time of Update: 2018-12-03
1:字串分割char *strtok_s(char *strToken, const char *strDelimit, char **context);例如:“2009,58,369”->”2009” “58” “369” -> 2009 58 369 ->存放在int16數組中int n = 0;TCHAR *token = NULL;TCHAR *nexttoken = NULL;if ( (token = _tcstok_s((TCHAR *)TotelStr,
Time of Update: 2018-12-03
在接觸PowerPC開發時,難免會碰到大小端轉換的問題,PowerPC系統核心是大端的,而像DMA、DSP、PCIE、FPGA都是小端的,所以有必要把它們詳細記錄一下。我們常常看到“alignment", "endian"之類的字眼, 但很少有C語言教材提到這些概念。實際上它們是與處理器與記憶體介面,編譯器類型密切相關的。考慮這樣一個例子:兩個異構的CPU進行通訊, 定義了這樣一個結果來傳遞訊息:struct Message{ short opcode; char
Time of Update: 2018-12-03
進程(Process)是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,是系統進行資源分派和調度的一個獨立單位。程式只是一組指令的有序集合,它本身沒有任何啟動並執行含義,只是一個靜態實體。而進程則不同,它是程式在某個資料集上的執行,是一個動態實體。它因建立而產生,因調度而運行,因等待資源或事件而被處於等待狀態,因完成任務而被撤消,反映了一個程式在一定的資料集上啟動並執行全部動態過程。線程(Thread)是進程的一個實體,是CPU調度和指派的基本單位。線程不能夠獨立執行,必須依存在應用程
Time of Update: 2018-12-03
想找個能遍曆檔案夾的辦法,找了下,大概有兩種,列舉如下第一種方法就是網上常見的一種方法:find(char * lpPath){ char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,"*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE =
Time of Update: 2018-12-03
USB模組可以分為多連接埠主機(MPH)模組和雙角色(DR)模組,它們都能夠串連一個或者二個外部連接埠,這些模組和外部連接埠總稱為USB介面。Mpc8379的USB模組採用的是DR,它的寄存器和資料結構均基於Intel的EHCI(Enhanced Host Controller Interface Specification for Universal Serial Bus),DR模組可以充當USB匯流排上的主機、外設、以及支援攜帶型On-The-Go(OTG))可協商主機/外設。
Time of Update: 2018-12-03
演算法的時間複雜度在PC機上開發可能關係不太大,但是到了嵌入式系統下,複雜度就變得很重要了,一個複雜度很高的程式會使得本來有限的資源變得更加拮据,本文系轉載自longmans的網易部落格,藉此學習下複雜度的計算。本文主要從四個方面分析演算法的複雜度:一、演算法耗費的時間和語句頻度: 一個演算法所耗費的時間=演算法中每條語句的執行時間之和。每條語句的執行時間=語句的執行次數(即頻度(Frequency
Time of Update: 2018-12-03
使用斷言assert()宏是用於保證滿足某個特定條件,用法是:assert(運算式);如果運算式的值為假,整個程式將退出,並輸出一條錯誤資訊。如果表達式的值為真則繼續執行後面的語句。使用這個宏前需要包含標頭檔assert.h例如#include <stdio.h>#include <assert.h>void main(){ float a,b; scan("%f %f",&a,&b); assert(b!=0);
Time of Update: 2018-12-03
當一個任務要進入資源,首先要得到一個訊號量(take that semaphore),只要有任務在使用這個訊號量,其它的要進入資源的任務要停止執行(blocked from execution),當這個任務完成了對資源的使用,它會釋放訊號量,允許另一個任務來使用資源。 semTake (semMutex, WAIT_FOREVER);. . critical region, only accessible by a single task at a timesemGive
Time of Update: 2018-12-03
接上篇文章 介紹完了Host,再來看下Peripheral驅動棧,為Peripheral驅動棧的結構圖: 風河USB Peripheral驅動棧中,位於底層的是目標控制器TC,它是Peripheral棧中用於串連USB的硬體部分。對於每種類型的TC,都會有對應的TCD,風河提供了Freescale Dual Role、NetChip NET2280、PDIUSBD12和PhilipsIsp1582四種TCD,它們的功能主要包括:1、實現任何硬體相關的功能;2、實現寄存器訪問,USB
Time of Update: 2018-12-03
本文出自 “bluefish” 部落格,請務必保留此出處http://bluefish.blog.51cto.com/214870/68462下面是幾個關於鏈表的非常經典的問題與實現,是在《程式員面試攻略》中看到的,由於實在是太經典了,所以忍不住在這裡貼下。
Time of Update: 2018-12-03
在高峰時間,實習生小飛常常會被電梯每層樓都停弄得很不耐煩,於是他想出了這樣一個辦法:由於樓層並不高,那麼在繁忙的時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層樓後,電梯聽下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓時,每個乘客選擇自己的目的層,電梯則自動計算出應停的樓層。 問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少? 解法一:採用枚舉的方法
Time of Update: 2018-12-03
這裡首先更正下上一篇中的一個錯誤,最後一步中的跳轉代碼當時一時倉促貼錯了,先改正如下:7、跳轉到Stage2入口處 這也是Stage1的最後一步,程式在執行到這一步後,基本的硬體初始化工作也就完成了,下面是跳轉的代碼:clear_bss:/* 執行清空bss操作 */lwzr3,GOT(__bss_start)#if defined(CONFIG_HYMOD)/* * For HYMOD - the environment is the very last item in
Time of Update: 2018-12-03
看了好久的nandflash手冊以及其他方面的一些資料,因為英語不好,所以手冊看的有點暈,幸好網路資源的豐富。總結一下我所理解的nandflash操作,基於一些其他的原因,暫時不繼續進行裸機編程,只是把所有的理解詳細的寫下來。1. 首先對於nandflash編程有三個方面 1. nandflash儲存空間,當然這是重點,因為對於nandflash編程就是對nandflash進行讀寫擦除等操作。 2.
Time of Update: 2018-12-03
3.5、弱指標 前面的幾種智能指標在不同場合可以獨立使用,然而,弱指標只有在配合共用指標使用時才會有意義,見下面例子:#include <windows.h> #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> #include <iostream> DWORD WINAPI reset(LPVOID p) {
Time of Update: 2018-12-03
首先瞭解下nand的檔案系統,就其結構可以分為兩類:基於塊裝置的常規檔案系統和日誌結構檔案系統。基於塊裝置的檔案系統最典型的就是Flash不是塊裝置,要想運行傳統FTL將vxWorks的系統中,基於DOS/FAT+FTL的結構實現的,DOSFS是YAFFS充分利用了16個位元組的空間,其中ecc,1個位元組為資料狀態字,剩餘8個位元組YAFFS源碼並考慮移植到(1代差不多mtdemul目錄下有一個2k的MTD裝置,進而可以將此裝置當中一個物理的yaffs檔案系統,direct目錄為direct介
Time of Update: 2018-12-03
今天在編寫項目的時候,我通常會用動態載入連結庫的方式編譯器,這樣編譯得到的程式會比較精簡一些,昨天,由於要將程式拿出來用於示範,對方電腦沒裝VC,所以我在工程選項中將動態載入的方式改成靜態載入。沒想到的是,重新編譯後VC竟然報錯如下:error RC2151 : cannot reuse string constants, 61446(0xF006) - "****" already defined. Cannot add 61446(0xF006) -
Time of Update: 2018-12-03
Subversion是近幾年崛起的版本管理工具,已經有人宣稱它會是CVS的接班人,SVN和CVS的功能類似,一個很貼切的比喻:SVN=版本控制+備份伺服器。下面是摘自百度百科的二者對比:“CVS和SVN的比較類似與比較C++和Java,很明顯CVS和SVN都遠比SourceSafe強大的多,如同C++和Java比Basic強大的多,CVS代表了幾乎代碼控制系統的所有功能項,儘管有時他的實現並不很方便,SVN修正並添加了一些CVS並不擁有功能。”在實際的使用中,感覺二者的操作基本類似,由於模仿自C
Time of Update: 2018-12-03
在編寫程式時,經常碰到這種情況,在通過類嚮導為一個對話方塊建立新類時,會彈出錯誤對話方塊,提示如下:unable to open the files (**.cpp) for class "**"。 而在項目目錄下卻產生了類相關的標頭檔和cpp檔案,並且在file