作者 主题:Cortex M3上的bodog ISR (Read 776 times)

0位成员和1位访客正在查看此主题。

离线 Radar_Macgyver

  • 常客
  • **
  • 帖子:482
  • 国家: 我们
Cortex M3上的bodog ISR
« on: 2020年12月9日,晚上11:20:16»
I'我一直在PSoC 5器件(Cortex M3)上使用bodog,并从示例中学习。当ISR必须使用“任务通知”或写入队列来发信号通知任务时,我发现此构造在所有中断服务例程中都使用了:

代码: [选择]
CY_ISR_PROTO(my_isr);
CY_ISR(my_isr)
{
portBASE_TYPE higher_priority_woken = pdFALSE;
uint32_t mask = 0;

mask = 端口SET_INTERRUPT_MASK_FROM_ISR();
{
xTaskNotifyFromISR(my_task_id, 0x1, eSetBits, &higher_priority_woken);
/* Can also be the following:
xQueueSendFromISR(my_queue, &some_data, &higher_priority_woken);
*/
}
portCLEAR_INTERRUPT_MASK_FROM_ISR(mask);
portEND_SWITCHING_ISR(higher_priority_woken);
}

那是什么 端口SET_INTERRUPT_MASK_FROM_ISRportCLEAR_INTERRUPT_MASK_FROM_ISR 宏吗?他们没有出现在Richard Barry发现的例子中's "掌握bodog实时内核"本书,以及许多其他适用于其他架构(例如AVR)的示例。在寻找有关此信息时,我的Google-fu似乎很虚弱。谢谢!
« 最后编辑:2020年12月11日,晚上11:40:28通过radar_macgyver »
 

离线 Doctorandus_P

  • 超级贡献者
  • ***
  • 帖子:1342
  • 国家: nl
回复:Cortex M3上的bodog ISR
« 在以下方面回复#1: 2020年12月10日,上午03:43:27»
回答此类问题的最快答案实际上是只阅读那些宏的代码's,弄清楚他们使用了哪些寄存器并读取数据手册的那部分。

如果您的IDE在20s或更短的时间内没有帮助您完成此类操作,则放弃它并获得一个不错的编程环境。
 

离线 格罗姆·贝斯特耶

  • 定期贡献者
  • *
  • 职位:166
  • 国家: nl
  • AndrevS @ IRC
回复:Cortex M3上的bodog ISR
« 在以下方面回复#2: 2020年12月10日,下午07:09:24»
它是由PSoC Creator生成的代码吗?
 

在线的 新脑

  • 超级贡献者
  • ***
  • 帖子:1035
  • 国家: SE
回复:Cortex M3上的bodog ISR
« 在以下方面回复#3: 2020年12月10日,晚上11:14:33»
这两个类似函数的宏在ISR中是完全多余的,因为它们已经是通知或队列API调用的一部分。
它们的目的是禁止优先级低于或等于使用bodog API的IRS所允许的最大优先级的中断。
实际上,它们避免API调用在关键部分重叠,同时仍允许更高优先级的中断(禁止使用API​​)。

那是哪个bodog版本?可能是曾经需要它们(行为在这方面已更改),但肯定不是从8.0开始。
Nandemo wa shiranai wa yo,shitteru koto dake。
 
以下用户感谢这篇文章: Radar_Macgyver

离线 Radar_Macgyver

  • 常客
  • **
  • 帖子:482
  • 国家: 我们
回复:Cortex M3上的bodog ISR
« 在以下方面回复#4: 2020年12月11日,上午06:10:36»
它是由PSoC Creator生成的代码吗?
不,来自我在为bodog编写ISR时发现的示例; CY_ISR_PROTO和CY_ISR宏是赛普拉斯的一部分' HAL. Here'有关bodog的PSoC端口的一些信息: //www.freertos.org/bodog-port-and-demo-for-Cypress-PSoC5-CY8C5588-Cortex-M3.html (hmm, shouldn'bodog源代码中的相应演示包括一个串行端口演示,其ISR设置并清除了中断屏蔽;我将其用作自己的ISR的基础。但是,我发现的大多数其他示例'似乎没有使用它们,因此是我的问题。

这两个类似函数的宏在ISR中是完全多余的,因为它们已经是通知或队列API调用的一部分。
它们的目的是禁止优先级低于或等于使用bodog API的IRS所允许的最大优先级的中断。
实际上,它们避免API调用在关键部分重叠,同时仍允许更高优先级的中断(禁止使用API​​)。

那是哪个bodog版本?可能是曾经需要它们(行为在这方面已更改),但肯定不是从8.0开始。
那'是我的怀疑,但没有简单的测试方法。没有它们,我的代码运行得很好,但是我'我对bodog不太了解,无法在CM3生成时说这是否会导致故障"nested"中断(目前,我所有的中断都具有相同的优先级)。一世'm使用bodog 10.4.0,但示例可能适用于旧版本。你能说吗'可以将它们排除在外吗?给定我使用的示例可以追溯到2017年'可能是因为它们是为bodog的较旧版本编写的。
 

在线的 新脑

  • 超级贡献者
  • ***
  • 帖子:1035
  • 国家: SE
回复:Cortex M3上的bodog ISR
« 在以下问题上回复#5: 2020年12月11日,上午08:57:38»
你能说吗'可以将它们排除在外吗?给定我使用的示例可以追溯到2017年'可能是因为它们是为bodog的较旧版本编写的。
正如你所说,他们没有'不会出现在我的其他任何演示中've checked.
bodog示例代码在描述以下内容时不包括它们 ...来自ISR API calls.

考虑到PSoC5端口在任务/通知/队列实现方面没有不同,我'我倾向于认为它们是无效代码,可以安全删除。

免责声明:不是bodog专家,只是业余用户。
Nandemo wa shiranai wa yo,shitteru koto dake。
 

离线 Radar_Macgyver

  • 常客
  • **
  • 帖子:482
  • 国家: 我们
回复:Cortex M3上的bodog ISR
« 在以下方面回复#6: 2020年12月11日,晚上11:43:06»
谢谢,我'll将它们注释掉,看看在进一步开发期间是否有任何收获。这只是我的第二个bodog项目,因此非常感谢任何建议!
 


分享我

掘客  Facebook  SlashDot  可口的  Technorati  推特  谷歌  雅虎
中频