gpt4 book ai didi

c++ - 爱特梅尔工作室7 : USART interrupt handler provided by ASF library works once only in case of encountering infinite loop in main()?

转载 作者:行者123 更新时间:2023-11-30 16:43:23 34 4
gpt4 key购买 nike

目前,我正在使用ASF库提供的usart_read_buffer_job函数。我将此函数放置在 while(1) 循环内,如下所示:

int main()
{
Some pieces of code for initialization;
while(1)
{
usart_read_buffer_job();
while(1) // The second infinite loop
{
Some other pieces of code;
}
}
}

它对于第一个中断处理程序调用非常有效。但是,从处理程序返回后,我无法再调用中断处理程序。程序在第二个无限循环内继续运行,并且无法再次执行 usart_read_buffer_job()。这可能是处理程序故障的原因。

在这种情况下,我的目的是跳转到 USART 中断处理程序,而不管 main() 中执行的无限循环数量如何。当然,如果不使用ASF,可以通过手动设置handler来解决这个问题,但我仍然想知道如何通过ASF提供的其他功能来解决这个问题。

期待尽快得到社区的回应。谢谢,

最佳答案

感谢您的快速回复。

我正在编写的代码是 secret 的。因此,我只能与您分享 ASF 库函数并简要说明其工作原理。

在ASF中,通常我们有两个处理中断的函数,分别是usart_read_buffer_jobusart_read_job

在使用这两个函数之前,处理程序调用由两个函数定义:

usart_register_callback:注册回调函数,由用户实现。

usart_enable_callback:当满足回调类型的条件时,将从中断处理程序中调用回调函数。

上面这两个函数被放置在初始化代码中,如问题所示。

然后,根据设计目的,每当通过 UART 外设分别使用 usart_read_buffer_job/usart_read_job 接收到一个字符或一组字符时,就会调用处理程序。

usart_read_buffer_job:设置驱动程序从 USART 读取到给定缓冲区。如果注册并启用,将调用回调函数。

usart_read_job:设置驱动程序以将数据从 USART 模块读取到给定的数据指针。如果注册并启用,接收完成后会调用回调。

您可以在http://asf.atmel.com/docs/latest/samd21/html/group__asfdoc__sam0__sercom__usart__group.html上找到有关这些功能的更多详细信息。

在这种情况下,假设主程序由于某些意外的无限循环而停止,处理程序在接收到从 UART 外设调用的命令后仍应随时工作,并执行一些重要的任务来解决问题,例如。

希望这个解释能让我之前的问题更清楚。并且,希望尽快得到大家的回复。

关于c++ - 爱特梅尔工作室7 : USART interrupt handler provided by ASF library works once only in case of encountering infinite loop in main()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302441/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com