|
@@ -224,20 +224,29 @@ sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, i
|
|
return t;
|
|
return t;
|
|
}
|
|
}
|
|
|
|
|
|
-sys_prot_t sys_arch_protect(void)
|
|
|
|
-{
|
|
|
|
- /* disable interrupt */
|
|
|
|
- return rt_hw_interrupt_disable();
|
|
|
|
|
|
+sys_prot_t sys_arch_protect(void)
|
|
|
|
+{
|
|
|
|
+ rt_base_t level;
|
|
|
|
+
|
|
|
|
+ /* disable interrupt */
|
|
|
|
+ level = rt_hw_interrupt_disable();
|
|
|
|
+
|
|
|
|
+ /* must also lock scheduler */
|
|
|
|
+ rt_enter_critical();
|
|
|
|
+
|
|
|
|
+ return level;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void sys_arch_unprotect(sys_prot_t pval)
|
|
|
|
+{
|
|
|
|
+ /* unlock scheduler */
|
|
|
|
+ rt_exit_critical();
|
|
|
|
+
|
|
|
|
+ /* enable interrupt */
|
|
|
|
+ rt_hw_interrupt_enable(pval);
|
|
|
|
+
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
-
|
|
|
|
-void sys_arch_unprotect(sys_prot_t pval)
|
|
|
|
-{
|
|
|
|
- /* enable interrupt */
|
|
|
|
- rt_hw_interrupt_enable(pval);
|
|
|
|
-
|
|
|
|
- return;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void sys_arch_assert(const char* file, int line)
|
|
void sys_arch_assert(const char* file, int line)
|
|
{
|
|
{
|
|
rt_kprintf("\nAssertion: %d in %s, thread %s\n", line, file,
|
|
rt_kprintf("\nAssertion: %d in %s, thread %s\n", line, file,
|