20031086 发表于 2009-6-11 16:49:41

在中断里发送信号量OSSemPost的问题

最近做了个小程序,在中断里发送一个信号量,以触发某个任务。

我是在文件main.c的主函数main.c里创建了这个信号量Sem,在主函数main.c外面声明了这个信号量,在os_cpu_c.c里的中断服务程序里发送信号量,在编译时,提示Error:c1815:Sem not declared(or typename),各位能否解释一下,如何在中断里使用信号量?谢谢了

sblpp 发表于 2009-7-18 02:24:05

进中断后需要调用OSIntEnter(),然后就可以OSSemPost信号量了!
OSIntEnter通知μC/OS-II内核,中断服务程序开始运行了。实际上,此函数做的工作是把一个全局变量OSIntNesting加1。在x86等有累加指令的CPU中,可以用指令代替OSIntEnter:
    INC BYTE PTR OSIntNesting
    此中断嵌套计数器可以确保所有中断处理完成后再作任务调度。另一个接口函数OSIntExit则通知内核,中断服务已结束。根据相应情况,返回被中断点(可能是一个任务或者被嵌套的中断服务程序)或由内核作任务调度。
  用户编写的ISR必须被安装到某一位置,以便中断发生后,CPU根据相应的中断号运行准确的服务程序。许多实时操作系统都提供了安装、卸载中断服务程序的API接口函数,有些成熟的RTOS甚至对中断控制器的管理都有相应的API函数。但 μC/OS-II内核没有提供类似的接口函数,需要用户在对应的CPU移植中自己实现。这些接口函数与具体的硬件环境有关,接下来PC体系下的中断处理对此有详细的说明。

sadankuangmo 发表于 2010-4-26 23:31:53

你在config.h这个文件里面把你声明这个信号量的文件包含进去试一下看看
页: [1]
查看完整版本: 在中断里发送信号量OSSemPost的问题