主要有兩個問題:
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)營口免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
第一個問題:為什么對WDT(0xe1)賦值會變成在0xe2那里賦值?
在回答這個問題時,有兩個方面要了解:1、計算機在內(nèi)存的存儲方式,一種是低字節(jié)放低位,高字節(jié)放高位,如是這一種,那么在你的電腦應(yīng)該顯示如:0XE1:78 0XE2:00;另一種存儲方式則是高字節(jié)放低位,低字節(jié)放高位,那么應(yīng)該是這樣的:0XE1:00 0XE2:78,你的電腦正是取用這種內(nèi)存存儲方式(WINDOWS)。
造成這種原因之一是你的字符類型不對,設(shè)置成CHAR類型,之二是你的內(nèi)存是16位的?還是32位的。如:原本是WDT_CONTR=0x78,但在系統(tǒng)編譯是就編譯是就是成了,WDT_CONTR=0X0078,甚至是0X0000 0078;其實是00占了78的位置,這就是傳話中的內(nèi)存對齊,塊對齊,也就是電腦的最小存儲空間,就是0000這么長,78存起來,為了保存相同的長度就用00填充就成了0078了。
第二個問題: c語言有沒有方法直接對指定的ram地址直接賦值?
每一個程序都是在計算機的虛擬內(nèi)存中運行,非底層程序是無法操作的,要操作指定的RAM地址,只有通過虛擬內(nèi)存轉(zhuǎn)換,但你看到的0XE1也只是虛擬內(nèi)存。是因為你的程序裝載到內(nèi)存是映射的起始地址是0x00000000罷了,給你造成了錯覺。
你可通過定時器中斷來延時,這樣不會影響到主程序的運行;
例:void timer0_ovf_isr(void)
{
time++;
if(time500)
{
time=0;
delay=1;
}
}
你可通過判斷delay的值,來實現(xiàn)延時;
C語言編寫代碼,主要是功能函數(shù),編譯成DLL文件。
C#項目中使用 using System.Runtime.InteropServices;//需要使用的組件命名空間
[DllImport("WDT_DIO64.dll")]//導(dǎo)出C語言的DLL文件(我的WDT_DIO64.dll)
internal static extern int InitDIO();//導(dǎo)出C語言的功能函數(shù)接口(我的int InitDIO())
然后就可以在需要功能函數(shù)引用位置 使用功能函數(shù)。
分享文章:c語言WDT函數(shù) c語言wz
當(dāng)前URL:http://jinyejixie.com/article36/doseisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、云服務(wù)器、移動網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、App開發(fā)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)