⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tatakitask.c

📁 uCOS在PIC芯片中的移植:以PIC24HJ64GP210为例进行uCOS在Microchip芯片中的移植
💻 C
字号:
#define TATAKI_TASK
#include <includes.h>

extern OS_EVENT *MboxTech_Tataki;       //捶打任务信箱
extern MSG_TECH_TATAKI_STRUCT MsgTech_Tataki;
INT8U TatakiSpdLvlGroups[10];  //捶打速度组
INT8U TatakiSpeedIndex=0;     //捶打速度指针
INT8U TatakiSpeedEndIndex=0; //捶打速度终点指针
INT8U TatakiSpeedDir=1; //捶打速度变化方向,1为递增,0为递减


void SetTatakiSpeedGroup (void)    
{
    INT8U i;
    for (i=0;i<10;i++)
    {
       TatakiSpdLvlGroups[i] = 0;
    }

    //TatakiSpdLvlGroups[0] = (INT32U)TatakiPwmTable[ MsgTech_Tataki.TatakiLSpeed-1 ]*PR3/100;     //低速
    TatakiSpdLvlGroups[0] =  MsgTech_Tataki.TatakiLSpeed;     //低速
    TatakiSpeedEndIndex = 0;
    switch ( MsgTech_Tataki.TatakiMode)
    {
    case 2: //双速交替
       TatakiSpdLvlGroups[1] = MsgTech_Tataki.TatakiHSpeed;//高速
       TatakiSpeedEndIndex = 1;     //捶打速度终点指针
       break;
    case 3: //循环多速
        TatakiSpeedEndIndex = MsgTech_Tataki.TatakiHSpeed-MsgTech_Tataki.TatakiLSpeed;//高速-低速   //捶打速度终点指针
        for(i=1;i<=TatakiSpeedEndIndex;i++)
        {
            TatakiSpdLvlGroups[i] = MsgTech_Tataki.TatakiLSpeed+i; //设定捶打速度组
        }
        break;
    case 1:

         break;
    default: //单一速度及其他
         break;    
    }
    
}

void SetAlterSpeed (void)
{
	SETUP_TATAKI(TatakiSpdLvlGroups[TatakiSpeedIndex]);
	if(TatakiSpeedDir==1)
	{
	 	if(TatakiSpeedIndex<TatakiSpeedEndIndex)
	 		TatakiSpeedIndex++;
	 	else
	 	{
	 		TatakiSpeedDir=0;
	 		TatakiSpeedIndex--;
	 	}
	}
	else
	{
	 	if(TatakiSpeedIndex>0)
	 		TatakiSpeedIndex--;
	 	else
	 	{
	 		TatakiSpeedDir=1;
	 		TatakiSpeedIndex++;
	 	}
	}
}    

void  TatakiTask(void *p_arg)
{
	MSG_TECH_TATAKI_STRUCT  *TatakiMass;
    (void)p_arg;
    INT8U tatakierror;  
    void *msg;
    TatakiSpeedIndex=0;  
    
    while (TRUE) 
    {  
  
       TatakiMass = OSMboxPend(MboxTech_Tataki,0,&tatakierror);      
		if (TatakiMass ==(void*)1) //未用
        {
             ;
        }
        else if(TatakiMass ==TECH_MBOX_STOP_RUN) //捶打动作停止信息
        {
            SETUP_TATAKI(TECH_SPEED_STOP);
    		OSMboxPost(MboxTataki_Finish,MBOX_VALID);
        }
        else//为手技调度发布的信息,
        {
//捶打信息分析及动作
            MsgTech_Tataki = *TatakiMass;
            SetTatakiSpeedGroup ();//捶打速度组,捶打终点指针设定
            if(MsgTech_Tataki.FollowMode == TECH_FLW_ALTER)        //定距间隔作动
            {
                if (MsgTech_Tataki.TatakiMode == TECH_TATAKI_SIMPLE)  //单一速度
                {
                   SETUP_TATAKI(TatakiSpdLvlGroups[0]);
                }
                else 
                {
                	SetAlterSpeed();
                }
                OSTimeDly(TICKS(TtkKeepTimeTab[MsgTech_Tataki.KeepTime-1]));//等待作動保持時間,
                SETUP_TATAKI(TECH_SPEED_STOP);    //捶打PWM=0,
    			OSMboxPost(MboxTataki_Finish,MBOX_VALID);
            }
            else 
            {
                if (MsgTech_Tataki.TatakiMode== TECH_TATAKI_SIMPLE)  //单一速度
                {
                   SETUP_TATAKI(TatakiSpdLvlGroups[0]);// 捶打PWM = TatakiSpdLvlGroups[0];
                }
                else
                { 
                    while (1)   //循环体
                    {
                    	SetAlterSpeed();
                        OSTimeDly(TICKS(TtkKeepTimeTab[MsgTech_Tataki.KeepTime-1]));//等待作动时间
                        msg = OSMboxAccept(MboxTech_Tataki);//检查邮箱信息
                        if(msg ==TECH_MBOX_STOP_RUN)        //停止信息 
                        {
                        	SETUP_TATAKI(TECH_SPEED_STOP);
    						OSMboxPost(MboxTataki_Finish,MBOX_VALID);
                        	break;    
                        }                
                    }

                }

            }
        }
    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -