guozhanxin 3 лет назад
Родитель
Сommit
c3f6fa7a9a
2 измененных файлов с 15 добавлено и 4 удалено
  1. 14 3
      port/port.c
  2. 1 1
      port/portserial.c

+ 14 - 3
port/port.c

@@ -24,15 +24,26 @@
 /* ----------------------- Modbus includes ----------------------------------*/
 #include "port.h"
 /* ----------------------- Variables ----------------------------------------*/
-
+static struct rt_semaphore lock;
+static int is_inited = 0;
 /* ----------------------- Start implementation -----------------------------*/
 void EnterCriticalSection(void)
 {
-    rt_enter_critical();
+    rt_err_t err;
+    if(!is_inited)
+    {
+        err = rt_sem_init(&lock, "fmb_lock", 1, RT_IPC_FLAG_PRIO);
+        if(err != RT_EOK)
+        {
+            rt_kprintf("Freemodbus Critical init failed!\n");
+        }
+        is_inited = 1;
+    }
+    rt_sem_take(&lock, RT_WAITING_FOREVER);
 }
 
 void ExitCriticalSection(void)
 {
-    rt_exit_critical();
+    rt_sem_release(&lock);
 }
 

+ 1 - 1
port/portserial.c

@@ -36,7 +36,7 @@ static struct rt_thread thread_serial_soft_trans_irq;
 /* serial event */
 static struct rt_event event_serial;
 /* modbus slave serial device */
-static rt_serial_t *serial;
+static struct rt_serial_device *serial;
 
 /* ----------------------- Defines ------------------------------------------*/
 /* serial transmit event */