コード例 #1
0
ファイル: LCD_TEST.c プロジェクト: debben/CE-426-Final
//clock task
__task void clock_task(void){
	  uint32_t ticks;
	  uint32_t last_keys = 0;
	  uint32_t last_joy = 0;
	  uint32_t value = 0;
	
		static unsigned char sec;
		for(;;){
			os_dly_wait(10);
			ticks++;
			if(ticks >= 10) {
				ticks = 0;
				os_sem_send(&semIncSec);
			}
			value = KBD_GetKeys();
			os_evt_set((uint16_t)((value ^ last_keys) & ~value),keyTaskId);
			last_keys = value;
			
			value = JOY_GetKeys();
			os_evt_set((uint16_t)((value ^ last_joy) & ~value),joyTaskId);
			last_joy = value;
			
	}
		
}
コード例 #2
0
ファイル: app_lib.c プロジェクト: mokuzaru/x808_sim808
/***sound控制***/
void sound_control(u8 state)
{
	switch(state)
	{
		case 0:		//不叫
			GPIO_ResetBits(GPIOB,BELL);break;
		case 1:		//叫
			GPIO_SetBits(GPIOB,BELL);os_sem_send(sound);break;
	}
}
コード例 #3
0
ファイル: semihost.c プロジェクト: 0xc0170/CMSIS-DAP
static void sh_main(void) {
    while(1) {
        // Wait for start flag
        os_evt_wait_or(FLAGS_SH_START, NO_TIMEOUT);

        do {
            if (swd_is_semihost_event(&r0, &r1)) {
                if (process_event()) {
                    swd_semihost_restart(r0);
                }
            } else {
                // Wait for 2 scheduler tick; the serial task may run at this point
                    os_dly_wait(2);
            }
        // Loop until stop flag is set
        } while (os_evt_wait_or(FLAGS_SH_STOP, 0 )==OS_R_TMO);

        // Stopped
        os_sem_send(semihostStoppedSem);
    }
}
コード例 #4
0
ファイル: task.c プロジェクト: mokuzaru/x808_sim808
/***接收ad转换数据 读取传感器数值 测量硬币种类***/
__task void get_adc_value(void)
{
	u8 bf=0,read_flash[2],dia_b=0,n;
	u16 adc_data=0,clear_config=0;
	u32 adc_buff=0;
	
	os_sem_init(adcsem,0);
	memset(view_detial,0,530);
	memset(view_send,0,10);
	memset(read_flash,0,4);
	ReadFlashNByte(0,read_flash,2);
	limitup=read_flash[0]+read_flash[1]*256;
	if(limitup==0||limitup==0xffff)
		limitup=7500;
	while(1)
	{
// 		os_sem_wait(adcsem,0xffff);
		while(1)
		{
			adc_value1=spi_readwrite_byte(SPI1,adc_data);
			adc_value=change_data(adc_value1);
			if((1000<adc_value&&adc_value<7500))
				break;
			clear_config++;
			if(clear_config==50000)
			{
				clear_config=0;
				memset(&refresh,0,8);
				i=0;								//5秒种没有硬币就将计数清零
			}
			os_dly_wait(1);
		}
		GPIO_ResetBits(GPIOC,GPIO_Pin_5);
		os_sem_send(iosem);
		TIM_Cmd(TIM4,ENABLE);
		value_count=0;
// 		while(add_count<25)
// 		{
			while(adc_value<7500)
	// 		while(1)
			{
				adc_buff=adc_buff+adc_value;
				add_count++;													//采样次数   0.2ms一次
				view_detial[view_i][add_count]=adc_value;
				os_dly_wait(1);
				adc_value=spi_readwrite_byte(SPI1,adc_data);
				adc_value=change_data(adc_value);
	// 			if(count==50)
	// 				break;
				if(add_count==49)
					break;
			}
// 		}
// 		view_detial[view_i][add_count+2]=count;		//view_detial数据位后面第二位是金属传感器检测的时间
// 		count=0;
		GPIO_SetBits(GPIOC,GPIO_Pin_5);
		adc_buff=adc_buff/add_count;
		if(add_count>20)
		{
			dia_b=(add_count/2)-2;
			adc_buff=0;
			for(n=0;n<5;n++)
				adc_buff=view_detial[view_i][dia_b+n]+adc_buff;
			adc_buff=adc_buff/5;
		}
		else
			adc_buff=8888;
//调试看数据
		view_detial[view_i][0]=add_count;			//对金属传感器采样的详细数据个数
		view_detial[view_i][add_count+1]=adc_buff;		//view_detial数据位后面第一位是对金属传感器采样得到数据的平均值
//*** 		
 		coin_kind[bf]=deal_value(adc_buff);					//比较金属传感器的电压值,得出币种
// 		if(view_detial[view_i][10]>6000)
// 			coin_kind[bf]=0;
		view_i++;
		if(view_i==5)
			view_i=0;
		bf++;
		if(bf==5)
			bf=0;
		adc_buff=0;
		add_count=0;
		clear_config=0;
		
// 		os_sem_send(iosem);
// 		os_sem_send(resultsem);
	}
}
コード例 #5
0
ファイル: task.c プロジェクト: mokuzaru/x808_sim808
/***读取IO状态  对IO特定状态计时 测量硬币直径***/
__task void io_keep_time(void)
{
	u8 bf=0,n=0;
	os_sem_init(iosem,0);

	while(1)
	{
 		os_sem_wait(iosem,0xffff);
/***光钎传感器  测直径***/
		while(1)
		{
			if(get_diasensor_state()==0)
			{
				TIM_Cmd(TIM2,ENABLE);
				TIM_Cmd(TIM4,DISABLE);
				value_count=0;
				break;
			}
			iotask_overtime();
			os_dly_wait(1);
		}
		while(1)
		{
			if(get_diasensor_state()==1)
			{
				TIM_Cmd(TIM2,DISABLE);
				n=view_detial[view_j][0];
				view_detial[view_j][n+2]=count;		//view_detial数据位后面第三位是光钎传感器测得的时间
				t2=count;
				count=0;
				break;
			}
			os_dly_wait(1);
		}
	/***  ***/		
			if(coin_kind[bf]!=0)
			{
				if(coin_kind[bf]==1&&deal_time(t2)==1)
					coin_kind[bf]=1;			//比较通过时间长度 得出币种
				else if(coin_kind[bf]==2&&deal_time(t2)>1)
				{
					coin_kind[bf]=deal_time(t2);
				}
				else
					coin_kind[bf]=0;
			}
			b_kind=coin_kind[bf];
			bf++;
			if(bf==5)
				bf=0;
			view_detial[view_j][n+3]=b_kind;
			view_j++;
			if(view_j==5)
				view_j=0;
			deal_coin(b_kind);
// 			b_kind=0;
			if(b_kind==0)
				os_sem_send(jbsem);
	// 		no_i=0;
	// 		os_sem_send(rfsem);		
			os_sem_send(resultsem);
	}
}
コード例 #6
0
ファイル: main.cpp プロジェクト: jackeyjiang/stm32-3d
//
//===============================================================
// 主循环任务
//===============================================================
__task void mainLoopTask(void) {
    static uint32 buzzerTimer;
    static uint32 tempTimer;
    static uint32 enterTimer;
    static bool   enterTriFlag;
    static bool   laserTriFlag;
    
    gpio.pinMode(PIN_END1_FAN, OUTPUT);
    gpio.pinMode(PIN_END2_FAN, OUTPUT);
    mainTaskRunEnable = true;
    while (taskRunEnable() == false) os_dly_wait(1);
while (1) {
    //
    //===========================================================   
    // 激光控制
    if (lcd.laserModle == false) {
        if (laserTriFlag == true) {
            stepMoto.dev->fanSpeed = 0;
            laserTriFlag = false;
        }
    } else {
        if (laserTriFlag == false) {
            gcode.G28();
            laserTriFlag = true;
            gcode.moveAbs (0, 0, para.printer.laserFocus, 0, para.motion.maxSpeed[X_AXIS]/2);
            for (int i=0; i<MAX_AXIS; i++) {
                gcode.targetPos[i] = gcode.currentPos[i];
            }
        }
    }
    //
    //===========================================================   
    // 温度控制
    if ((os_time_get() - tempTimer) > PID_DT) {
        tempHotBed .outManage ();
        tempHotEnd1.outManage ();
        if (lcd.laserModle == false) {
            tempHotEnd2.outManage ();
        }
        tempTimer = os_time_get();
    }
    //
    //===========================================================   
    // 电机空闲待机 
    if ((os_time_get() - stepMoto.motoIdleTimer > (uint32)(MOTO_IDLE_TIME*60000)) && 
        (stepMoto.dev->runningFlag == false)){
        stepMoto.motoIdleTimer = os_time_get();
        gcode.M84();
        gcode.printStartTime = 0;
    } 
    //
    //===========================================================   
    //== 蜂鸣器
    if (lcd.buzzerFlag) {
        if ((os_time_get() - buzzerTimer) > 50) {
            (lcd.buzzerFlag) ? (lcd.buzzerFlag--) : (lcd.buzzerFlag = 0);
            buzzerTimer = os_time_get();
        }
        gpio.digitalWrite(LCD_BUZZER_PIN, HIGH);
    } else {
        buzzerTimer = os_time_get();
        gpio.digitalWrite(LCD_BUZZER_PIN, LOW);
    }
    //
    //===========================================================   
    //== enter 按键
    if (gpio.digitalRead(LCD_ENCODENT) == HIGH) {
        if (((os_time_get() - enterTimer) > 100) && (enterTriFlag == false)){
            lcd.encoderEnt = true;
            lcd.buzzerFlag = 2;
            enterTriFlag   = true;
            os_sem_send(&lcd.sem_lcd);
        }
    } else {
        enterTimer   = os_time_get();
        enterTriFlag = false;
    }
    //
    //===========================================================   
    //== reset 按键
    static uint32 resetTimer = 0;
    static bool   pauseTriFlag = false;
    static bool   resetTriFlag = false;
    if (gpio.digitalRead(LCD_RESET_PIN) == LOW) {
        if (((os_time_get() - resetTimer) > 200) && (pauseTriFlag == false)){
            pauseTriFlag   = lcd.pauseFlag = true;
            lcd.buzzerFlag = 4;
        }
        if (((os_time_get() - resetTimer) > 5000) && (resetTriFlag == false)){
            resetTriFlag   = lcd.resetFlag = true;
            lcd.buzzerFlag = 10;
            gcode.stop();
        }
    } else {
        resetTimer   = os_time_get();
        pauseTriFlag = resetTriFlag = false;
    }
    //
    //===========================================================   
    //
    os_dly_wait(20);    
}
}
コード例 #7
0
ファイル: GUI_X_RTX.c プロジェクト: dtyangcm/DT-RTT
void GUI_X_Unlock(void)    { os_sem_send(GUI_Semaphore); }