This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6678多任务资源访问冲突问题



各位专家好,现在基于SYS/BIOS开发的6678DSP,遇到一个问题,

就是我在核0里面既有硬中断,还有软中断,而且每种中断都有相应的优先级,我设置了一个共享变量,软、硬中断都可以访问并修改它,现在遇到的问题是如何避免临界资源冲突问题。

因为软中断的优先级较低,当软中断试图修改共享资源时如果被硬中断抢占了,并且在硬中断中对共享资源进行了修改,那么当软中断返回时有可能继续对共享资源进行赋值,从而忽略了硬中断对共享资源的操作。

谢谢,其实就是在DSP中如何解决不同优先级的进程对共享资源访问的问题!DSP中有没有类似于C中的信号量互斥机制,再次感谢。

  • 信号量当然有,可以用硬件的semaphore,也可以用SYS/BIOS提供的软件信号量;

    如果是单核多任务共享,用软件信号量就可以,当然也可以用硬件信号量,如果是多核共享,用硬件信号量。

    硬件信号量见Semaphore2 Hardware Module for KeyStone Devices User's Guide (Rev. A)

  • 首先非常感谢您的回复,Allen Yin。看了一下信号量,好像不能解决我这个问题。

    我是想要一种保护机制,例如我声明一个全局变量 gvar,在核0的HWI我对该变量进行gvar++处理,而在SWI中我进行gvar--处理。这样可能就会出现问题,如果在SWI中我进行gvar--操作时,指令刚刚进行了gvar减1的操作,在即将对给gvar赋值时突然被HWI抢占了……那么在HWI中对gvar进行了++的操作……返回到SWI时,继续对gvar赋值,就忽略了HWI中对gvar的操作

    就是如何避免这种情况啊,也就是在SWI中对gvar操作时禁止HWI抢占,谢谢!

  • SWI及HWI中不能使用信号量中止程序,像你这种需要只能在SWI中disable HWI,禁止HWI抢占。

  • 你好,Andy Yin1,非常感谢您的回复,我试着在SWI中使用hwi_disable()和hwi_restore()结合进行HWI的关闭与打开,可以满足我的要求,谢谢您的提示!