打印
[51单片机]

C8051F120中断服务程序忽然全部失灵,请高手帮助分析原因

[复制链接]
2019|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
humaga|  楼主 | 2016-5-19 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人最近使用C8051F120做一个电动机控制电路,编程时遇到了问题,请高手帮助分析。程序共用了4个定时器、外部硬件中断(PCA)4路,程序启动时很正常,但运行10几秒到几分钟后(时间不固定),会出现所用中断程序全面进不去的情况,不知道啥原因,请高手帮助分析。硬件原因?软件原因?还是?头疼死了。

相关帖子

沙发
humaga|  楼主 | 2016-5-19 15:34 | 只看该作者
中断服务程序进不去的时候,主程序还在正常运行,手动调试程序还能单步调试控制LED,证明程序并没有跑飞或死机,但所有的中断服务程序都进不去了。不知道什么原因。

使用特权

评论回复
板凳
ningling_21| | 2016-5-19 16:47 | 只看该作者
humaga 发表于 2016-5-19 15:34
中断服务程序进不去的时候,主程序还在正常运行,手动调试程序还能单步调试控制LED,证明程序并没有跑飞或 ...

这几个中断有没有在程序中被关闭?

使用特权

评论回复
地板
yhn1973| | 2016-5-19 17:03 | 只看该作者
这问题只有贴程序才知道,否则就是猜哑谜

使用特权

评论回复
5
bkn1860| | 2016-5-19 17:24 | 只看该作者
要猜出结果来还真不容易

使用特权

评论回复
6
ayb_ice| | 2016-5-19 18:31 | 只看该作者
应该是EA被改写了

使用特权

评论回复
7
mohanwei| | 2016-5-20 10:18 | 只看该作者
我知道,是某种原因

使用特权

评论回复
8
1113240207| | 2016-5-20 12:03 | 只看该作者
int application_start(void)
{
  app_log_trace();
  OSStatus err = kNoErr;
  app_context_t* app_context;
  mico_Context_t* mico_context;
  LinkStatusTypeDef wifi_link_status;

  /* Create application context */
  app_context = ( app_context_t *)calloc(1, sizeof(app_context_t) );
  require_action( app_context, exit, err = kNoMemoryErr );

  /* Create mico system context and read application's config data from flash */
  mico_context = mico_system_context_init( sizeof( application_config_t) );
  require_action(mico_context, exit, err = kNoResourcesErr);
  app_context->appConfig = mico_system_context_get_user_data( mico_context );
  app_context->mico_context = mico_context;
  app_context_global = app_context;

  /* user params restore check */
  if(app_context->appConfig->configDataVer != CONFIGURATION_VERSION){
    err = mico_system_context_restore(mico_context);
    require_noerr( err, exit );
  }

  /* mico system initialize */
  err = mico_system_init( mico_context );
  require_noerr( err, exit );
  MicoSysLed(true);

  // fix for AP down problem
  err = mico_system_notify_register( mico_notify_WIFI_CONNECT_FAILED, (void *)appNotify_ConnectFailedHandler, app_context->mico_context );
  require_noerr_action(err, exit, app_log("ERROR: MICOAddNotification (mico_notify_WIFI_CONNECT_FAILED) failed!") );

  // block here if no wifi configuration.
  while(1){
    if( mico_context->flashContentInRam.micoSystemConfig.configured == wLanUnConfigured ||
       mico_context->flashContentInRam.micoSystemConfig.configured == unConfigured){
         mico_thread_msleep(100);
       }
    else{
      break;
    }
  }

  /* Bonjour for service searching */
  MICOStartBonjourService( Station, app_context );

  /* check wifi link status */
  do{
    err = micoWlanGetLinkStatus(&wifi_link_status);
    if(kNoErr != err){
      mico_thread_sleep(1);
    }
  }while(kNoErr != err);

  if(1 ==  wifi_link_status.is_connected){
    app_context->appStatus.isWifiConnected = true;
    MicoRfLed(true);
  }
  else{
    app_context->appStatus.isWifiConnected = false;
    MicoRfLed(false);
  }

  /* start cloud service */
#if (MICO_CLOUD_TYPE == CLOUD_FOGCLOUD)
  app_log("MICO CloudService: FogCloud.");
  err = MiCOStartFogCloudService( app_context );
  require_noerr_action( err, exit, app_log("ERROR: Unable to start FogCloud service.") );
#elif (MICO_CLOUD_TYPE == CLOUD_ALINK)
  app_log("MICO CloudService: Alink.");
#elif (MICO_CLOUD_TYPE == CLOUD_DISABLED)
  app_log("MICO CloudService: disabled.");
#else
  #error "MICO cloud service type is not defined"
#endif

  /* start user thread */
  err = startUserMainThread( app_context );
  require_noerr_action( err, exit, app_log("ERROR: start user_main thread failed!") );

exit:
  mico_rtos_delete_thread(NULL);
  return err;
}

使用特权

评论回复
9
ayb_ice| | 2016-5-20 12:14 | 只看该作者
用了rtos,估计移植有BUG吧

使用特权

评论回复
10
killerblood| | 2017-2-26 22:45 | 只看该作者
楼主你的问题解决了么???,我遇到的问题和你一样,目前也还没解决

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝