请教://
#define VIRTUAL_SYSTEM_ASIC_REGS_BASE (0x90000000 | 0x20000000)
#define WATCHDOG_BASE (VIRTUAL_SYSTEM_ASIC_REGS_BASE + 0x00940000)
#define WATCHDOG_WDCONTROL ((volatile ULONG *)(WATCHDOG_BASE + 0x00))
#define WATCHDOG_WDSTATUS ((volatile ULONG *)(WATCHDOG_BASE + 0x04))
#define WDCONTROL_DISABLE 0xAA55
#define WDCONTROL_ENABLE 0xAAAA
// 激活watchdog
*WATCHDOG_WDCONTROL = WDCONTROL_ENABLE;
// 关闭watchdog
*WATCHDOG_WDCONTROL = WDCONTROL_DISABLE;
上述代码功能在C#中如何实现?是用指针吗?会不会受到限制?谢谢。。

解决方案 »

  1.   

    C#中没有指针define中定义的可以通过常量来实现
      

  2.   

    public static Class SomeConstParameters
    {
        public static unsigned long VIRTUAL_SYSTEM_ASIC_REGS_BASE = (0x90000000 ¦ 0x20000000);
        public static unsigned long WATCHDOG_BASE = ((0x90000000 ¦ 0x20000000) + 0x00940000) 
        public static unsigned long WATCHDOG_WDCONTROL = WATCHDOG_BASE;
        public static unsigned long WATCHDOG_WDSTATUS = WATCHDOG_BASE + 0x04;
        public static unsigned long WDCONTROL_DISABLE = 0xAA55 ;
        public static unsigned long WDCONTROL_ENABLE  = 0xAAAA ;
    }
      

  3.   

    这里似乎不是当作地址来用的,只是通过与、或操作来获取各个bit的状态的,所以可以直接定义成静态变量。
      

  4.   

    C#中有指针,但要包含在unsafe里,被称为不安全代码,在你声明的不安全代码区可以使用指针,但没有宏定义,可以用readonly的形式来达到同样效果。
      

  5.   

    刚在IDE中给你重新整理了一下,如下:    public static class SomeConstParameters
        {
            public static ulong VIRTUAL_SYSTEM_ASIC_REGS_BASE = 0x90000000 | 0x20000000;
            public static ulong WATCHDOG_BASE = VIRTUAL_SYSTEM_ASIC_REGS_BASE + 0x00940000;
            public static ulong WATCHDOG_WDCONTROL = WATCHDOG_BASE;
            public static ulong WATCHDOG_WDSTATUS = WATCHDOG_BASE + 0x04;
            public static ulong WDCONTROL_DISABLE = 0xAA55;
            public static ulong WDCONTROL_ENABLE = 0xAAAA;
        }
      

  6.   

    谢谢楼上的各位
    to  khler 
    你的代码中
    public static ulong WATCHDOG_WDCONTROL = WATCHDOG_BASE;
    public static ulong WATCHDOG_WDSTATUS = WATCHDOG_BASE + 0x04;这两行无法表达原文的意思。。我直接把变量定义成指针型,无法编译通过
    另外,我这个不是加密狗编程,只是一个程序中用到这一小段to  HowkWolf 
    可以详细说说吗?我平时不用C#,所有对这方面不熟悉。。