From 07d2ace8b4771e2ad48d4a9e6bf43a2022a25fac Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Fri, 23 May 2014 15:36:51 +0800 Subject: Added SYSSTOP & MSTATE macro New example main.c --- rs422lib/sysctl.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'rs422lib/sysctl.c') diff --git a/rs422lib/sysctl.c b/rs422lib/sysctl.c index cafcb62..ea05587 100644 --- a/rs422lib/sysctl.c +++ b/rs422lib/sysctl.c @@ -19,8 +19,11 @@ void sysctl_void() } void sysroutine() +// << Drawback: interrupt may happen between else and CPUOFF +// Critical section -> unlikely to have a race condition { - if (syscall>0) + if (!syscall) + _BIS_SR(CPUOFF); switch ((syscall & (-syscall))) // This is used to get the lowest bit { case SYS_BIT7: @@ -56,8 +59,7 @@ void sysroutine() sysarr[0](); break; } - else - _BIS_SR(CPUOFF); + } inline int sys_b2i(int bit) -- cgit v1.2.3-70-g09d2