请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:EK-TM4C1294XL 您好!
不确定原因、但 sscanf 会导致我的代码中出现系统故障。 它一直运行正常、但我对 sscanf 不再起作用的程序执行了一些操作。 更糟糕的是、我修改了该程序、它高度模块化(包含大量.c 和.h 文件)。 在世界上什么情况下会导致此故障 ISR?
下面是 sscanf 用法的一个示例:
/*
* blink.c
*
*创建日期:2017年1月24日
* 作者:Helder Sales
*/
#include "blink.h"
#include "../../includes.h
内联 void Blink_InitLedPins (void)
{
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
while (!ROM_SysCtlPeripheralReady (SYSCTL_Periph_GPION)||!ROM_SysCtlPeripheralReady (SYSCTL_Periph_GPIOF));
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4);
}
内联浮点 Init_Timer0 (float freq)
{
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!ROM_SysCtlPeripheralReady (SYSCTL_Periph_TIMER0));
ROM_TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK _PIOSC);
ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
fPeriod = 16000000 /(freq*2);
ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、fPeriod -1);
ROM_IntEnable (INT_TIMER0A);
ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ROM_IntPrioritySet (INT_TIMER0A、0xE0);
ROM_TimerEnable (TIMER0_BASE、TIMER_A);
return (0);
}
void Timer0IntHandler (void)
{
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
IF (ROM_GPIOPINREAD (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1)& ROM_GPIOPinREAD (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4)))
{
ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1、0);
ROM_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4、0);
}
其他
{
ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4、GPIO_PIN_0 | GPIO_PIN_4);
}
}
内联 int blink_main (int argc、char * argv[])
{
if (argc!= 2)
返回(CMD_ERROR);
if (strcmp (argv[1]、"stop")==0)
{
if (!ROM_SysCtlPeripheralReady (SYSCTL_Periph_TIMER0))
{
UARTprintf ("\nBlink NAO estava em executcao。\n\n");
返回(0);
}
ROM_IntDisable (INT_TIMER0A);
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ROM_TimerDisable (TIMER0_BASE、TIMER_A);
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_GPIOF);
UARTprintf ("\n 终止一个执行函数执行闪烁。\n");
return (CMD_sucess);
}
float freq;
字符 ch;
//验证字符,并返回错误状态(如果有)
INT8_t 条件= sscanf (argv[1]、"%f%c"、&freq、&ch);
if (freq < 0 ||条件!= 1)
返回(CMD_ERROR);
Blbing_InitLedPins();
init_Timer0 (freq);
return (CMD_sucess);
}