重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
主要有两个问题:
专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业营口免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
第一个问题:为什么对WDT(0xe1)赋值会变成在0xe2那里赋值?
在回答这个问题时,有两个方面要了解:1、计算机在内存的存储方式,一种是低字节放低位,高字节放高位,如是这一种,那么在你的电脑应该显示如:0XE1:78 0XE2:00;另一种存储方式则是高字节放低位,低字节放高位,那么应该是这样的:0XE1:00 0XE2:78,你的电脑正是取用这种内存存储方式(WINDOWS)。
造成这种原因之一是你的字符类型不对,设置成CHAR类型,之二是你的内存是16位的?还是32位的。如:原本是WDT_CONTR=0x78,但在系统编译是就编译是就是成了,WDT_CONTR=0X0078,甚至是0X0000 0078;其实是00占了78的位置,这就是传话中的内存对齐,块对齐,也就是电脑的最小存储空间,就是0000这么长,78存起来,为了保存相同的长度就用00填充就成了0078了。
第二个问题: c语言有没有方法直接对指定的ram地址直接赋值?
每一个程序都是在计算机的虚拟内存中运行,非底层程序是无法操作的,要操作指定的RAM地址,只有通过虚拟内存转换,但你看到的0XE1也只是虚拟内存。是因为你的程序装载到内存是映射的起始地址是0x00000000罢了,给你造成了错觉。
你可通过定时器中断来延时,这样不会影响到主程序的运行;
例:void timer0_ovf_isr(void)
{
time++;
if(time500)
{
time=0;
delay=1;
}
}
你可通过判断delay的值,来实现延时;
C语言编写代码,主要是功能函数,编译成DLL文件。
C#项目中使用 using System.Runtime.InteropServices;//需要使用的组件命名空间
[DllImport("WDT_DIO64.dll")]//导出C语言的DLL文件(我的WDT_DIO64.dll)
internal static extern int InitDIO();//导出C语言的功能函数接口(我的int InitDIO())
然后就可以在需要功能函数引用位置 使用功能函数。