SOGO論壇
  登入   註冊   找回密碼
查看: 1632|回覆: 4
列印 上一主題 下一主題

[問題求助] 請教韌體 C 語言程序中怎麼接流程? [複製連結]

Rank: 1

狀態︰ 離線
跳轉到指定樓層
1
發表於 2015-5-30 02:39:50 |只看該作者 |倒序瀏覽
以往我在 ASM 語言下執行每個程序都有各自的 CALL 或用 RAM 儲存 Program Counter 記錄下次返回位址。

所以可以建立數個獨立的程序讓它自己跑。

每個程序若 polling 檢查到執行的任務結束後,會從 main loop 返回繼續接下一個任務,讓每個程序都能獨立執行,直到程序流程作完。


但現在碰到新 IC 用到 C 寫,不知道怎麼接。

目前用比較笨的方法每個程序都用 ram 去記 step 跑完流程或建立 command 的方式去依照 command 做對應的任務。

是否有其他架構設計的建議或參考書籍和文章,這笨方法困擾很久…。



//main loop
while(1)
{
    ......

    check_process1_return()

    check_process2_return()

    ......
}
   



process1()

   task1()
   ...

   task2()
   ...

   task3()
   ...

   end



process2()

   task1()
   ...

   task2()
   ...

   task3()
   ...

   task4()
   ...

   task5()
   ...
   ...
   ...
   taskN()
   end
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
2
發表於 2015-8-9 18:54:56 |只看該作者
你可以嘗試使用RTOS (RealTime Operation-System) 市面上有許多免費的例如FreeRTOS,RT-thread,....
要快速上手可以看uC-OSII/III 或者Keil,或者自行開發

用C寫其實概念也跟ASM一樣需要記錄PC,SP(Stack Point),通用暫存器等這部分大多數也是使用組合語言去完成Context-Switch(內文交換).若是最簡單的方法就是寫一個Switch ...Case 作FSM(Finate-State-Manchine)
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 1 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 1   查看全部評分

失敗只有一種:那就是半途而廢

Rank: 1

狀態︰ 離線
3
發表於 2015-11-7 19:50:52 |只看該作者
感謝兩位的提醒,受益良多。
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-4-24 05:27

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部