硬體c語言
『壹』 怎樣用c語言獲取硬體信息
這個需要相關的庫以及API。
給你一個獲取cpu信息的函數:
DWORD MyCPUSpeed()
{
BSTR bstrMyCpuName=NULL;
BSTR bstrMyPropName = NULL;
VARIANT pVal;
char szText[256];
int nCpuNum=0;
DWORD dwCpuSpeed=0;
IWbemClassObject *pCpuInst=NULL;
IWbemQualifierSet* pQualSet = NULL;
bstrMyPropName = SysAllocString(L"CurrentClockSpeed");
if(bstrMyPropName == NULL)
{
return dwCpuSpeed;
}
while(1)
{
memset(szText,0,sizeof(szText));
sprintf(szText,"Win32_Processor.DeviceID=\"CPU%d\"", nCpuNum);
bstrMyCpuName = _bstr_t(szText);
if(bstrMyCpuName == NULL)
{
break;
}
if(pSvc->GetObject(bstrMyCpuName, 0L, NULL, &pCpuInst, NULL) != S_OK)
{
break;
}
if(pCpuInst->Get(bstrMyPropName, 0L, &pVal, NULL, NULL) == S_OK)
{
nCpuNum++;
dwCpuSpeed += pVal.lVal;
}
VariantClear(&pVal);
SysFreeString(bstrMyCpuName);
bstrMyCpuName = NULL;
}
if(bstrMyPropName != NULL)
{
SysFreeString(bstrMyPropName);
bstrMyPropName = NULL;
}
if(bstrMyCpuName != NULL)
{
SysFreeString(bstrMyCpuName);
bstrMyCpuName = NULL;
}
memset(szText,0,sizeof(szText));
sprintf(szText, "CPU個數: %d, CPU頻率: %ld Mhz", nCpuNum, dwCpuSpeed);
cout<<"------------------------"<<szText<<"-------------------------"<<endl;
return dwCpuSpeed;
}
『貳』 為什麼說C語言是直接對硬體操作的語言
VB不行
語言從低級到高級,語義功能越來越完善(意思是寫出來的程序越來越接近人類語言),但是同時失去了對硬體的直接操縱能力,而且執行效率越來越低。
比如最低級的機器語言(全部是各種數字),沒學過根本看不出是什麼意思,但是對硬體操縱能力最強,想怎麼讓硬體做硬體就會怎麼做。執行效率為百分之百。
其次是匯編語言,匯編語言稍微向英語邁進了一點,但是很有限,一般人也看不明白的,比如這句
mov
a,b
誰知道什麼意思!其操縱硬體能力也極強,隨心所欲,執行效率基本也是百分之百。
而C語言介於高級和低級之間,代碼容易理解,還可以用指針操縱硬體(不過還是很局限的,CPU就無法之間操縱了),執行效率為80%,對於一直語言來說很不錯了。
Basic語言完全是高級語言,代碼簡單,但是不具備操縱硬體能力,也就是你想寫個代碼直接讓內存怎麼怎麼樣,內存不聽你的,只聽編譯好的程序的。而且執行效率也很低了。
『叄』 C語言可以直接對硬體進行操作嗎
不能。
首先,C語言不能夠直接對硬體進行操作。從本質上來說,連匯編語言都不可以。只有機器語言能夠直接操作硬體。
其次,C語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的C語言了。
以GCC編譯器為例,這個可以分為四步。
第一步是預處理,包括語法檢查等工作。 gcc -P abc.c 第二步由源程序生產匯編語言代碼。 gcc -S abc.c 會生成abc.s文件,這個文件里就是匯編代碼。 第三步編譯器生成目標代碼,一個源文件生成一個目標代碼。 gcc -c abc.c 會生成abc.o 第四步連接器從目標代碼生成可執行文件。 gcc abc.o
最後,相對來說,C語言在高級語言當中是最貼近物理層面的語言。它也被稱作高級語言裡面的低級語言。因為它很多方面都非常貼近硬體。典型的就是指針,這是一種通過物理地址直接操作內存的變數。
『肆』 都說C語言可以直接操作硬體
不能。
首先,C語言不能夠直接對硬體進行操作。從本質上來說,連匯編語言都不可以。只有機器語言能夠直接操作硬體。
其次,C語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的C語言了。
以GCC編譯器為例,這個可以分為四步。
第一步是預處理,包括語法檢查等工作。
gcc -P abc.c
第二步由源程序生產匯編語言代碼。
gcc -S abc.c
會生成abc.s文件,這個文件里就是匯編代碼。
第三步編譯器生成目標代碼,一個源文件生成一個目標代碼。
gcc -c abc.c
會生成abc.o
第四步連接器從目標代碼生成可執行文件。
gcc abc.o
最後,相對來說,C語言在高級語言當中是最貼近物理層面的語言。它也被稱作高級語言裡面的低級語言。因為它很多方面都非常貼近硬體。典型的就是指針,這是一種通過物理地址直接操作內存的變數。
『伍』 C語言是如何控制硬體的
1.指針變數p分配在棧上,而字元串"abcdefg"分配在文字常量區。
2.是的。指針也是編譯器生成的數據類型,是個長整型。
3.內存地址分為5塊,堆區,棧區,全局(靜態)數據區(分為未初始化和初始化區),
文字常量區,代碼區。存儲在不同區域的數據釋放時間不同,存儲在堆區的數據必須由程序員負責釋放,用free或者是delete。而棧區的由系統自動釋放。全局和靜態的生存期就是整個程序運行期。
4.首先,概念性錯誤,編譯器並不執行程序,執行程序的是你的系統。編譯器只是實現了高級語言向機器語言的轉化而已。至於計算機的工作原理,這個概念也太泛了,有硬體層也有軟體層。硬體層基本也就是80x86的匯編和內存管理,軟體層也就是操作系統了,請問你想知道什麼?
5.a是數組名,最重要的是a是一個指針常量,你該了解了吧,常量是不能參與指針運算的,所以a++是錯的。關於calloc和malloc,釋放內存方面沒什麼區別(這個是個人觀點)。
關於指針變數沒有初始化的問題。其實指針本身也是個長整行的變數,他存放的地址完全可以理解為4*8的整數,那麼他的分配方式也跟普通的變數一樣了。如果你是全局指針,那麼編譯器會把它自動初始化為00000000(十六進制),如果是局部指針,那麼這個量就是未知的了,根據函數堆棧有不同的結果。null也就是內存被寫成了00000000(十六進制).這個空不是說不存在,而是內存被寫成了4*8=32位的全0.
『陸』 怎麼用C語言編程來控制硬體如何寫啊
處理器對周邊硬體的操作,實際上就是讀取該硬體上寄存器的信息和向其寄存器寫入信息的操作。抽象的看,就是對硬體上寄存器對應的地址空間進行操作。當然由於硬體種類繁多,結構不一,一般情況下,硬體的生產廠商會為對應的操作系統提供一組控制函數,這些函數用以實現操作系統廠商為某一類硬體定義的一組規范的必須實現的介面,這就是驅動,通常廠商還會提供更多的函數以支持更高級的功能。
所以,對硬體的操作,方式方法是多種的,要怎麼做,取決於你要操作什麼樣的東西,達到什麼樣的效果。當有了目標,請查閱該硬體設備的SDK。記住一點就好,只要設備能夠被操作,我們也能對其狀態寄存器,控制寄存器進行讀寫操作,那麼就可以控制,至於怎麼弄,那不正是你去上學要學的、學完需要思考得么?
『柒』 電腦硬體與C語言編程
電腦硬體,包括電腦中所有物理的零件,以此來區分它所包括或執行的數據和為硬體提供指令以完成任務的軟體。 電腦硬體主要包含:機箱,主板,匯流排,電源,存儲控制器,界面卡,攜儲存裝置,內置存儲器,輸入設備,輸出設備, CPU風扇,蜂鳴器等 C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。因此,它的應用范圍廣泛,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,具體應用比如單片機以及嵌入式系統開發。
『捌』 用C語言怎樣控制硬體
如果是電腦程序的話,譬如你在vc6.0裡面c語言裡面編寫一個程序,那麼vc6裡面的編譯器會把你的c語言語句按照對應的關系翻譯成你計算機能識別的計算機語句,然後你電腦cpu會按照這些指令來控制你的硬碟,內存讀寫之類的硬體操作。
如果是單片機之類的話,譬如你在keil裡面用c語言編寫了一個單片機程序,那麼keil的編譯器會把你的c語言程序編寫成匯編語言程序文件,然後把那個匯編程序文件燒到單片機晶元上就可以讓晶元按照指令工作了。