主循环中的错误行为

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
Rajucoolsuraj.
离线
最后一次露面:6个月3周前
加入:2018-12-12 16:09
主循环中的错误行为

你好对话框,

void timer0_general_user_callback_function(void){静态uint8_t n = 0;//如果(10 == n){n = 0;timeout_expiration--;if(gpio_getpinstatus(gpio_led_port,gpio_lex_pin)){gpio_setinactive(gpio_lex_port,gpio_led_pin);} else {gpio_setactive(gpio_led_port,gpio_led_pin);n ++;静态void button_timer_activtation(uint8_t delay_sec){wdg_freeze();//停止计时器输入设置timer0_stop();timeout_expiration = delay_sec;//寄存SWTIM_IRQN IRQ TIMER0_REGISTER_CALLBACK的回调函数(TIMER0_GENERAL_USER_CALLBACK_FUNCTER); // Enable TIMER0 clock set_tmr_enable(CLK_PER_REG_TMR_ENABLED); // Sets TIMER0,TIMER2 clock division factor to 8, so TIM0 Fclk is F = 16MHz/8 = 2Mhz set_tmr_div(CLK_PER_REG_TMR_DIV_8); // clear PWM settings register to not generate PWM timer0_set_pwm_high_counter(0x0); timer0_set_pwm_low_counter(0x0); // Set timer with 2MHz source clock divided by 10 so Fclk = 2MHz/10 = 200kHz timer0_init(TIM0_CLK_FAST, PWM_MODE_ONE, TIM0_CLK_DIV_BY_10); // reload value for 100ms (T = 1/200kHz * RELOAD_100MS = 0,000005 * 20000 = 100ms) timer0_set_pwm_on_counter(20000); // Enable SWTIM_IRQn irq timer0_enable_irq(); // Start Timer0 timer0_start(); // Wait for desired number of seconds while (timeout_expiration); // Disable TIMER0, TIMER2 clocks set_tmr_enable(CLK_PER_REG_TMR_DISABLED); wdg_reload(WATCHDOG_DEFAULT_PERIOD); }

在main()之前(1){schedule_hille_ble_on()之前的main()中调用上面的代码。

代码不会根据所需的逻辑运行。

即使在TimeOut_expion达到0之后也会调用ISR回调。

尽快帮助。

谢谢

问候

raju.

霍尼韦尔

设备:
Rajucoolsuraj.
离线
最后一次露面:6个月3周前
加入:2018-12-12 16:09
你好对话框,

你好对话框,
这是一个设计问题 -

timeout_expiration应该是“易失性”

问候

raju.

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

很高兴你认为你的问题,感谢迹象,

谢谢,PM_DIALOG.