【发布时间】:2016-04-27 10:16:41
【问题描述】:
我使用 Atmega328P µC 通过 UART 获取字符串并将其转换为 int。
我尝试使用atoi() 函数或sscanf() 来转换它,但它们需要很长时间才能转换,因此它们会阻塞中断。
如果我停止转换并仅通过 UART 接收所有符号,但如果我在接收到某些传输字符后进行转换,则会丢失。
有没有什么方法可以加快转换以停止阻塞RX中断?
【问题讨论】:
-
这个字符串,是完整的吗?包括它的空终止符?在尝试任何 atoi() 或 strxxx() 调用之前,通过您使用的任何协议完全传输?
-
另外,您使用的波特率是多少?对于阻碍中断处理的此类调用,速率必须高于 [extremely high]。
-
您没有在中断服务程序中执行转换吗? ISR 应该简单地将数据保存在某处,主程序流应该执行转换。
-
嗯 - 这是一个微不足道的功能,即使在中断处理程序中执行时也是如此。当数据进入时,可能会更好地逐个字符地运行,将累加器乘以 10 并添加“char-0x30”直到出现空值,(或 CR,或 LF,或任何/无论如何协议作品)。
-
无论如何,除非 OP 提供代码和协议的更多详细信息,否则我是 VTC 的“不清楚”。
标签: c string type-conversion microcontroller interrupt