请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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); }