C#之------指针操作

 

  之前听人说C#没有指针,因为不安全,百度了一下是这么说的:

C#之------指针操作_第1张图片




现在因为工作需要操作硬件看门狗,知道原来C#也是可以操作指针的。

程序环境:.NET MicroFramework
开发工具:VisualStudio 2013
开发语言:C#
通信工具:新生命神码工具

程序功能:我们的开发硬件在特殊外围情况下可能会出新死机现象。解决方法是通过看门狗程序发现死机,然后C#让MCU指针复位。让MCU重启。


C#操作单片机指针
程序操作如下:

C#之------指针操作_第2张图片


代码:

 

using System;
using Microsoft.SPOT;
using System.Threading;

namespace DoItError
{
    /// <summary>
    /// 项目属性中选择生成 
    /// 生成 中勾选“允许不安全的代码”
    /// 类中标记 unsafe 修饰符 允许使用指针
    /// </summary>
    public class Program
    {
        /// <summary>搞死硬件</summary>
        public static void Main()
        {
            int a = 0;
            while (true)
            {
                a++;
                Thread.Sleep(1000);
                Debug.Print(a.ToString());

                if (a == 20)
                {
                    Debug.Print("----------执行------------");
                    new testclass().todo();
                    return;
                }
            }

        }
        public unsafe class testclass
        {
            public void todo()
            {
                //声明一个指针
                int* i;
                //为指针赋值,指向一个不存在的内存地址
                i = (int*)0x00000000;
                //获取这个指针
                var j = *i;
            }
        }
    }
}

 

上面的代码实现功能:计数,20秒后单片机死机,重启继续开始。

 

    当然C#是支持指针运算符操作的,只是为了安全VS将指针功能关闭编译,我们需要打开;

 

解决办法 

1、设置VS 项目中“属性”→“生成” 勾选“允许不安全代码”

2、在MF程序使用指针的类上加上 unsafe 修饰符。

3、声明一个指针 int * i;为i赋值一个不存在的内存地址 i=(int *)0x00000000; 取值: var j = *i;

C#之------指针操作_第3张图片


这样VS就支持指针编译了。

然后硬件输出。

例程下载:CSharp操作指针.rar


大热天口干舌燥的,大晚上还在敲代码的都很辛苦了。发张美女给大家降降温。

C#之------指针操作_第4张图片

 

 

欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群幸福的程序员



你可能感兴趣的:(C#)