Hiroki Tanaka / MDD_L432KC

Dependencies:   arrc_mbed

Files at this revision

API Documentation at this revision

Comitter:
TanakaRobo
Date:
Thu Sep 26 00:36:19 2019 +0000
Parent:
0:f65bd64d88b7
Child:
2:da44cd3b6601
Commit message:
add disable irq

Changed in this revision

library/scrp_slave.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/library/scrp_slave.cpp	Mon Aug 26 07:39:37 2019 +0000
+++ b/library/scrp_slave.cpp	Thu Sep 26 00:36:19 2019 +0000
@@ -44,7 +44,7 @@
         my_id_ = 10;
     }
     for(int i = 1;i<255;++i){
-        procs_[i] = 0;
+        procs_[i] = NULL;
     }
 }
 
@@ -137,10 +137,11 @@
 void ScrpSlave::check(int port){
     uint8_t rx_cmd;
     int16_t rx_data;
-    bool received = false;
+    //bool received = false;
     bool broadcast = false;
-    while(serial_[port]->readable()){
-        if(serial_[port]->getc() != STX)continue;
+    if(serial_[port]->readable()){//while
+        if(serial_[port]->getc() != STX)return;//continue;
+        __disable_irq();//割り込みオフ
         uint8_t rx_id = serial_[port]->getc();
         uint8_t tmp_rx_cmd = serial_[port]->getc();
         uint8_t tmp_rx_dataL = serial_[port]->getc();
@@ -149,7 +150,8 @@
         
         uint8_t sum = rx_id + tmp_rx_cmd + tmp_rx_dataL + tmp_rx_dataH;
         if(sum != rx_sum){
-            continue;
+            __enable_irq();
+            return;//continue;
         }
         
         if(rx_id == 255){
@@ -157,31 +159,36 @@
         }else if(my_id_ == rx_id){
             broadcast = false;
         }else{
-            break;
+            __enable_irq();//割り込みオン
+            return;//break;
         }
         
         rx_cmd = tmp_rx_cmd;
         rx_data = tmp_rx_dataL + ((int16_t)tmp_rx_dataH << 8);
-        received = true;
-    }
+        //received = true;
+    }else{
+        return;
+    }/*
     if(!received){
         return;
-    }
+    }*/
     int tx_data = rx_data;
-    if(rx_cmd == 0){
+    if(rx_cmd == 0){//通信テスト
         tx_data = rx_data;
-    }else if(rx_cmd == 254){
+    }else if(rx_cmd == 254){//id変更
         uint8_t new_id = rx_data;
         my_id_ = new_id;
         changeID(new_id);
-    }else if(rx_cmd == 253){
+    }else if(rx_cmd == 253){//id確認
         tx_data = my_id_;
         rx_cmd = 250;
         broadcast = false;
-    }else if(procs_[rx_cmd] == 0 || !procs_[rx_cmd](rx_data,tx_data)){
+    }else if(procs_[rx_cmd] == NULL || !procs_[rx_cmd](rx_data,tx_data)){
+        __enable_irq();
         return;
     }
     if(broadcast){
+        __enable_irq();
         return;
     }
     
@@ -202,7 +209,8 @@
     while(!serial_[port]->writeable());
     if(mode_%2 == 1 && port == 0){
         rede_->write(0);
-    }    
+    }
+    __enable_irq();
     return;
 }