首页 > 代码库 > C#之指针操作

C#之指针操作

 

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




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

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

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


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




代码:

 

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;




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

然后硬件输出。

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


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

 

 

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