導航:首頁 > 編程語言 > 狀態機的c語言編程

狀態機的c語言編程

發布時間:2024-09-14 06:12:15

① C語言 狀態機代碼 怎麼寫

剛好前段時間寫了一個簡單協議的狀態機,代碼就不寫了,說一下大概吧
1、確定一共有多少種狀態,這里的狀態有開和關,細分還有say thankyou 和警告
2、確定狀態之間的遷移條件

如果按照四種狀態:開、關、說謝謝、警告,那麼這四種狀態之前的遷移條件很明顯了

分兩個函數:1、檢查是否需要遷移狀態;2、遷移狀態。
遍歷各種狀態檢查是否有狀態需要發生遷移。一般用一個switch將各種狀態列出,然後在各種狀態裡面用if檢查是否需要遷移狀態,如果需要遷移,做好標記。
再次遍歷各種狀態,檢查哪些狀態做了標記,遷移到新狀態,並做相應的操作,比如進入關的時候,做關門動作

剛才忘記說了,還有一個運轉狀態機函數,main函數在被觸發的情況下調用運轉函數,觸發條件有:投幣,人進入。

② AVR 單片機C語言怎樣實現按鍵按一下led燈閃爍 再按一下led燈滅如此反復循環 led接PC0腳 按鍵接PB0腳 (用

用狀態機寫:
函數1:LED閃爍
main()
{
while(1)
{
if(KEY)
State = ~State;
if(State)
LED閃爍
else
LED熄滅
}
}

③ C語言中如何控制時間高手進!

1.肯定不能用scanf()函數,沒有時間限制設定。
2.方法1:同步邏輯方式:循環檢測1s超時,判斷之內有無鍵盤輸入。
3.方法2:非同步邏輯方式:採用有限狀態機編程,1s超時作為一個事件輸入。
一般情況下,都會採用方法2進行軟體設計。

④ 如何用c語言實現:a,b,c三個事件,依次進行,每到a時就執行事件1,再到b,再執行事件1,再c,再事件1.

典型的狀態機結構,可以去網上找找有關的資料,大概的結構像這樣

enum { state_A, state_B, state_C } state = state_A;

while(1)
{
switch ( state )
{
case state_A:
if ( event_A ) // 這里也可以用switch
{
action_1(); // 在某狀態下發生某事件執行某個動作,並轉入下個狀態
state = state_B;
}
else if ( event_B )
{

}
else
{

}
break;
case state_B:
... ...
}

}

根據你的問題補充,可以這樣劃分狀態
准備輪詢1號機,等待1號機應答(已經輪詢1號機,但1號機未應答),准備輪詢2號機,等待2號機應答,准備輪詢3號機,等待3號機應答,
或者分成3個狀態加一個標志,
輪詢1號機,輪詢2號機,輪詢3號機,加一個有無應答標志,
其實這兩種分法沒有本質區別。
程序框架大概的樣子是這樣
switch ( state )
case 准備輪詢1號機:
發送輪詢1號機的命令
state = 等待1號機的應答;
break;
case 等待1號機的應答;
判斷1號機的應答狀態,可能是正確、錯誤、超時,分別處理,並設置狀態
正確:
state = 准備輪詢2號機
錯誤:
state = 准備輪詢1號機,重試
超時:
state = 准備輪詢1號機,重試,具體做什麼可以很靈活

閱讀全文

與狀態機的c語言編程相關的資料

熱點內容
單片機延時程序計算 瀏覽:442
編譯原理語法翻譯 瀏覽:502
pr編譯出錯渲染存在偏移 瀏覽:260
如何製作自家的app 瀏覽:197
推薦一個解壓軟體rar解壓幫手 瀏覽:207
wd文檔加密器 瀏覽:745
伺服器上傳壓縮包一般是什麼格式 瀏覽:331
發送加密文件密碼幾位數 瀏覽:158
樹洞app怎麼樣 瀏覽:173
vivo編譯時間可以改么 瀏覽:147
編譯和編輯怎麼區分 瀏覽:979
iar編譯文件順序 瀏覽:898
java二叉搜索樹 瀏覽:633
王者怎麼看好友的伺服器 瀏覽:733
無線編碼單片機 瀏覽:464
天聯高級版域名伺服器地址 瀏覽:206
鴻蒙用什麼編譯 瀏覽:730
伺服器如何迅速擴容 瀏覽:792
伺服器無固定ip地址不 瀏覽:643
安卓手機如何折扣充值 瀏覽:996