Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 开发arduino的函数millis_C_Arduino_Simulation_Synchronous - Fatal编程技术网

C 开发arduino的函数millis

C 开发arduino的函数millis,c,arduino,simulation,synchronous,C,Arduino,Simulation,Synchronous,我正在寻找如何在ForeC语言中开发类似于arduino函数millis的函数(这是一种特殊语言,使用与C相同的语法)。它不支持time.h库,所以我找到了开发函数millis的方法: int clock; int millis(){ while(1){ clock++; return clo } } 但是当我在这个函数中调用这个函数时: void drive_buzzer() { typedef enum { e_sys_wait_buz, e_play_buz, e_end_bu

我正在寻找如何在ForeC语言中开发类似于arduino函数millis的函数(这是一种特殊语言,使用与C相同的语法)。它不支持time.h库,所以我找到了开发函数millis的方法:

int clock;
int millis(){
while(1){
 clock++;
 return clo
}
}
但是当我在这个函数中调用这个函数时:

void drive_buzzer()
{

  typedef enum { e_sys_wait_buz, e_play_buz, e_end_buz, e_silence_buz} buz_state_t;
  static unsigned char buz_state = e_sys_wait_buz;
  static unsigned long timer = 0;


 switch ( buz_state ) {
  // Waiting for a sound to emit...
  case e_sys_wait_buz:
    if ( g_snd.snd_evt )
    {
      g_snd.repeat--;
      timer = millis()+g_snd.duration;
      //tone(BUZZER_PIN,g_snd.freq);  
     // pwm(g_snd.freq,0.5);
      printf("%s\n","bbbbbbbbbbbbbbbbbbbbbbbbbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepppp" );   
      buz_state = e_play_buz;
      printf("%d\n",millis() );
      printf("%ld\n",timer );
    }
    break;

  // Play the sound
  case e_play_buz:

      if ( millis() > timer ) {
        //noTone(BUZZER_PIN);
        //printf("%s\n","e_play_buz" );   
        buz_state = e_end_buz;
      }
    break;

  // Stop the sound
  case e_end_buz:
    if ( g_snd.repeat != 0 ) { 
        g_snd.repeat--;
        //printf("%s\n","e_end_buz" );  
        timer = millis()+g_snd.interval;
        buz_state = e_silence_buz;
    }
    else
      buz_state = e_sys_wait_buz;
    break;

  // Silence interval between two sounds
  case e_silence_buz:
    if ( millis() > timer ) {
      //tone(BUZZER_PIN,g_snd.freq); 
      //printf("%s\n","e_silence_buz" );   
      timer = millis()+g_snd.duration;
      buz_state = e_play_buz;
    }
    break;
  default:
    break;
 }

}
它仅适用于第一种情况:( 任何想法或有用的链接如何模拟时钟的行为(不使用任何库)
谢谢!

您需要实现一个定时中断,定期更新变量
时钟
。您的函数
毫秒()
然后只需返回
时钟的值即可。
从
millis
中读取
clock
必须是原子的。

而(1){clock++;return clo}
看起来非常像一个无用的循环。语法错误或未定义的变量。millis()只需将全局变量增加1并返回它(可能)。这与任何计时无关。