可重入性、内核调用和SDK调用

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
10个帖子/ 0个新
最后发表
JamesHiebert
离线
最后看到:7个月2周以前
加入:2014-10-24真理
可重入性、内核调用和SDK调用

你好,对话框,

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

有哪些电话是我们绝对不能从ISR打来的吗?

谢谢!

设备:
PM_Dialog
离线
最后看到:1天13小时前
工作人员
加入:2018-02-08 11:03
嗨JamesHiebert,

嗨JamesHiebert,

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

谢谢,PM_Dialog

JamesHiebert
离线
最后看到:7个月2周以前
加入:2014-10-24真理
PM_Dialog,

PM_Dialog,

我所说的可重入安全是这样的:
1.任务T运行函数F时,…
2.一个中断发生,处理程序H运行来处理这个中断。
3.处理器H也调用函数F。
4.处理程序H完成并将控制返回给任务T,任务T继续运行函数F。

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

PM_Dialog
离线
最后看到:1天13小时前
工作人员
加入:2018-02-08 11:03
嗨JamesHiebert,

嗨JamesHiebert,

如果两次调用ke_msg_alloc(),则将分配两次消息。ke_msg_send()也会发生同样的情况,如果调用两次,内核消息将发送两次。arch_restore_sleep_mode()恢复睡眠模式之前禁用和arch_force_active_mode()将δisable睡但拯救睡眠模式状态,所以如果arch_restore_sleep_mode被称为两次,也arch_force_active_mode()应该被称为两次。如果您想在ISR中使用这些功能,强烈建议您在特定条件下使用这些功能。你在ISR中使用这些功能吗?

谢谢,PM_Dialog

JamesHiebert
离线
最后看到:7个月2周以前
加入:2014-10-24真理
嗨PM_Dialog,

嗨PM_Dialog,

是的,arch_restore_sleep_mode()、arch_force_active_mode()、ke_msg_alloc()和ke_msg_send()都是从isr调用的。

我理解不止一次地调用函数应该导致它们的行为不止一次地发生。但是,如果在中断发生时,执行在ke_msg_alloc()(或ke_msg_send())中间,并且从ISR再次调用ke_msg_alloc()(或ke_msg_send()),该怎么办?这两个函数在执行时屏蔽中断吗?

为了防止出现这种情况,我可以屏蔽和恢复arch_restore_sleep_mode()和arch_force_active_mode()中的中断(或者使用代码包围任务对ke_msg_alloc()和ke_msg_send()的调用,如果后两者没有受到保护,则屏蔽和恢复中断)。我需要吗?

谢谢。

PM_Dialog
离线
最后看到:1天13小时前
工作人员
加入:2018-02-08 11:03
嗨JamesHiebert,

嗨JamesHiebert,

从arch_restore_sleep_mode()和arch_force_active_mode()的源代码中可以看到,这些函数没有屏蔽中断。关于ke_msg_alloc()和ke_msg_send()函数,让我检查一下,我会尽快给你回复。

谢谢,PM_Dialog

PM_Dialog
离线
最后看到:1天13小时前
工作人员
加入:2018-02-08 11:03
嗨JamesHiebert,

嗨JamesHiebert,

我检查了ke_msg_alloc()和ke_msg_send()函数的源代码,它们都禁用ARCH_RESTORE_SLEEP_MODE()和ARCH_FORCE_ACTE_MODE()函数的中断。

谢谢,PM_Dialog

JamesHiebert
离线
最后看到:7个月2周以前
加入:2014-10-24真理
PM_Dialog,

PM_Dialog,

抱歉,我对你的上一篇文章说“…ke_msg_alloc()和ke_msg_send()函数,它们都禁用中断arch_restore_sleep_mode()和arch_force_active_mode()函数”感到困惑。您似乎在暗示所有4个功能都禁用中断。但是,函数arch_restore_sleep_mode()和arch_force_active_mode()不会禁用中断。你是说ke_msg_alloc()和ke_msg_send()函数是否禁用中断?

PM_Dialog
离线
最后看到:1天13小时前
工作人员
加入:2018-02-08 11:03
嗨JamesHiebert,

嗨JamesHiebert,

很抱歉给你们带来了困惑。arch_restore_sleep_mode()和arch_force_active_mode()不要禁用中断,但ke_msg_alloc()和ke_msg_send()函数禁用中断。

谢谢,PM_Dialog

JamesHiebert
离线
最后看到:7个月2周以前
加入:2014-10-24真理
没问题,谢谢

没问题,谢谢你的澄清。