none
Visual C# 是否可以撰寫 ISR (interrupt service routine) RRS feed

  • 問題

  • Dear 各位先進 :

    Visual C# 是否可以撰寫像 MCU(微處理器) 裡 ISR (interrupt service routine) 的功能 ?

    例如開了一個 Form , 開始執行程式以後 , 啟動 ISR , 監控特定的"變數"變化 ,

    當程式執行過程 , 對該 "變數" , 進行修改 , 則進入 ISR 裡進行相應處置 ,

    因為不是很想用 timer 去達到這個功能 ,

    這個部分 , 網路上找不到相關的文章 , 還請各位先進多多幫忙 . 謝謝 .

    2011年5月25日 上午 04:11

解答

  • 那用事件回應就好了.

    類似以下這樣:

    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public delegate void SampleEventHandler();
            public event SampleEventHandler SampleEvent;

            private bool testvar;
            public bool _testvar
            {
                get { return testvar; }
                set
                {
                    testvar = value;
                    if (value ==true)
                    {
                        SampleEvent();
                    }
                }

            }
            public void OnSampleEvent()
            {
                MessageBox.Show("事件被觸發");
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                this.SampleEvent += new SampleEventHandler(OnSampleEvent);
            }

            private void button1_Click(object sender, EventArgs e)
            {
                _testvar = true;
            }

            private void button2_Click(object sender, EventArgs e)
            {
                _testvar = false;
            }
        }

    你只要改變 _testvar屬性值為true時就會引發自訂事件 SampleEvent


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月25日 上午 06:22
    版主

所有回覆

  • 硬體層 CLR 無法管,所以用 C# 寫基本上是不行的。

    請改用 C/C++ 配合 DDK 與組合語言撰寫。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579
    2011年5月25日 上午 04:37
    版主
  • 我想問一下, 你所謂的 "變數" 是在該C#程式中定義的, 還是其它執行檔記憶體空間的變數 ?
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月25日 上午 04:53
    版主
  • Dear 小朱 :

    硬體方面 , 了解 , 目前正在評估要學 C# 還是 VC++ . 這個會是其中一個考量 , 感謝 !

    2011年5月25日 上午 05:38
  • Dear Bill

    這個 變數 或 旗標 , 是在 C# 程式裡被定義的 , C# 的 Form 程式開始執行 , 才會被宣告 !

    這種情況 , 有方法或參考文獻可以學習嗎?

    2011年5月25日 上午 05:42
  • 那用事件回應就好了.

    類似以下這樣:

    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public delegate void SampleEventHandler();
            public event SampleEventHandler SampleEvent;

            private bool testvar;
            public bool _testvar
            {
                get { return testvar; }
                set
                {
                    testvar = value;
                    if (value ==true)
                    {
                        SampleEvent();
                    }
                }

            }
            public void OnSampleEvent()
            {
                MessageBox.Show("事件被觸發");
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                this.SampleEvent += new SampleEventHandler(OnSampleEvent);
            }

            private void button1_Click(object sender, EventArgs e)
            {
                _testvar = true;
            }

            private void button2_Click(object sender, EventArgs e)
            {
                _testvar = false;
            }
        }

    你只要改變 _testvar屬性值為true時就會引發自訂事件 SampleEvent


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月25日 上午 06:22
    版主
  • 如果你的程式開發會偏向硬體整合,有 COM Port 或是硬體 SDK 可用的話,C# 即足夠。

    但若是要深入系統或是硬體層次 (ex: driver) 的話,C 和 DDK 比較適合。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579
    2011年5月25日 上午 06:56
    版主
  • Dear Bill :

    _testvar 改變 , 觸發了 OnSampleEvent() ,

    這個架構 , 似乎可以符合我既有的需求 , 看來要實作才能知道夠不夠了 ,

    感謝協助 ! 這個訊息對我有一定的幫助 ! ^_^

    2011年5月25日 上午 10:19
  • 要觀察變數的內容值不需要寫到ISR, 您可以參考這個範例, 製作基本的Debug功能即可:CLR Managed Debugger (mdbg) Sample
    2011年5月25日 上午 10:20
  • Dear 小朱 :

    是的 , 目前是要朝著軟硬體整合的方向前進 , COM Port 應該不會有太大的問題 ,

    我比較怕的是 C# 對板卡纇 , 含驅動程式 , 整合系統的 interrupt 的支援性 ,

    例如我在外部按下 "緊急按鈕"(實體) , 板卡收到訊息 , 透過驅動程式 , 改變特定的變數 , 觸發中斷事件 ,

    這是我目前預估會遇到的狀況 , VC++ 應該是可以達到 , 但是要花很長的時間去學 ,

    而 C# 似乎比較好學些 , 才會有這個前期的評估 ,

    感謝感謝!  ^_^

    2011年5月25日 上午 10:30
  • Dear tihs :

    從 MCU 轉到人機 , 有點轉不過來 , 才想說 , 是不是一樣使用 ISR 或軟體 ISR ,

    感謝你的意見 , 我會試試看. ^_^

    2011年5月25日 上午 10:39
  • To mowson:

    有一篇文章正好在講這個, 給你參考

    http://www.dotblogs.com.tw/kangting/archive/2011/05/26/26194.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月25日 下午 04:45
    版主