可重入性、内核和SDK调用

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
10个职位/0个新职位
最后一篇文章
杰米谢伯特
离线
最后一次见到:6个月3周前
已加入:2014-10-24 14:17
可重入性、内核和SDK调用

你好Dialog,

DA14581/SDK 5.0.X重入程序的内核和SDK调用是否安全(例如,ke_msg_alloc()、ke_msg_send()、arch_restore_sleep_mode()、arch_force_active_mode())?我们确实从ISR和应用程序任务中进行了这些调用。

有什么我们绝对不应该从ISR打来的电话吗?

谢谢!

设备:
PM\U对话框
离线
最后一次见到:46分54秒前
工作人员
已加入:2018-02-08 11:03
嗨,杰米谢伯特,

嗨,杰米谢伯特,

你能澄清一下“安全再入境”是什么意思吗?您可以从ISR调用这些函数,但是您不能完全确定如果您得到另一个中断并且ISR将再次触发,您将不会有任何其他问题。强烈建议在特定条件下使用这些功能,而不是从ISR使用。

谢谢,下午好

杰米谢伯特
离线
最后一次见到:6个月3周前
已加入:2014-10-24 14:17
PM\U对话框,

PM\U对话框,

我所说的重新进入安全是指:
1任务T正在运行函数F,当。。。
2中断发生,处理程序H运行以处理中断。
三。处理程序H也调用函数F。
4处理程序H完成并将控制权返回给任务T,任务T继续运行函数F。

在这一点上,函数F的行为是否可以预测?如果函数F访问静态或全局变量,则可能会出现不可预知的问题,具体取决于函数F的设计和中断发生的时间。

PM\U对话框
离线
最后一次见到:46分54秒前
工作人员
已加入:2018-02-08 11:03
嗨,杰米谢伯特,

嗨,杰米谢伯特,

如果调用两次ke\u msg\u alloc(),则会分配两次消息。同样的情况也会发生在ke\u msg\u send()上,如果调用它两次,内核消息将被发送两次。arch\u restore\u sleep\u mode()将睡眠模式恢复到禁用前的状态,arch\u force\u active\u mode()将δ禁用睡眠,但保存睡眠模式状态,因此如果要调用两次arch\u restore\u sleep\u mode(),也应该调用两次arch\u force\u active\u mode()。如果您想在ISR中使用这些功能,强烈建议您在特定条件下使用这些功能。您是否在ISR中使用这些功能?

谢谢,下午好

杰米谢伯特
离线
最后一次见到:6个月3周前
已加入:2014-10-24 14:17
嗨,PM\U对话,

嗨,PM\U对话,

是的,arch\u restore\u sleep\u mode()、arch\u force\u active\u mode()、ke\u msg\u alloc()和ke\u msg\u send()都是从ISRs调用的。

我知道多次调用函数会导致它们的行为发生多次。但是如果在中断发生时,执行处于ke\u msg\u alloc()(或ke\u msg\u send())的中间,并且从ISR再次调用ke\u msg\u alloc()(或ke\u msg\u send()),该怎么办?这两个函数是否在执行时屏蔽中断?

为了防止出现这种情况,我可以在arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()中屏蔽和恢复中断(或者用代码将来自对ke\u msg\u alloc()和ke\u msg\u send()的任务的调用包围起来,如果后两个不受保护的话,这些代码会屏蔽和恢复中断)。我需要吗?

谢谢。

PM\U对话框
离线
最后一次见到:46分54秒前
工作人员
已加入:2018-02-08 11:03
嗨,杰米谢伯特,

嗨,杰米谢伯特,

从arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()的源代码中可以看到,这些函数不会屏蔽中断。关于keu msg\u alloc()和keu msg\u send()函数,让我检查一下,我会尽快给你回复。

谢谢,下午好

PM\U对话框
离线
最后一次见到:46分54秒前
工作人员
已加入:2018-02-08 11:03
嗨,杰米谢伯特,

嗨,杰米谢伯特,

我检查了ke\u msg\u alloc()和ke\u msg\u send()函数的源代码,它们都禁用了arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()函数的中断。

谢谢,下午好

杰米谢伯特
离线
最后一次见到:6个月3周前
已加入:2014-10-24 14:17
PM\U对话框,

PM\U对话框,

抱歉,我被你上一篇帖子搞糊涂了,上面说“…ke\u msg\u alloc()和ke\u msg\u send()函数,它们都禁用了中断作为arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()函数。”你似乎暗示这4个函数都禁用了中断。但是,函数arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()不会禁用中断。你是说ke\u msg\u alloc()和ke\u msg\u send()函数是否禁用中断?

PM\U对话框
离线
最后一次见到:46分54秒前
工作人员
已加入:2018-02-08 11:03
嗨,杰米谢伯特,

嗨,杰米谢伯特,

很抱歉给你添麻烦。arch\u restore\u sleep\u mode()和arch\u force\u active\u mode()不禁用中断,但是ke\u msg\u alloc()和ke\u msg\u send()函数使残废中断。

谢谢,下午好

杰米谢伯特
离线
最后一次见到:6个月3周前
已加入:2014-10-24 14:17
没问题,谢谢你

没问题,谢谢你澄清。