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

📄 my_task_motor.c

📁 基于T-KERNEL平台
💻 C
字号:
/*******************************************************************************motor_task.c*Motor Control routines*Copyright (C) 2004, 2005 T-Engine Application Development Centre (TEADEC),*		    Renesas System Solutions Asia PTE. LTD. (RSS)*
*EOSTK - Embedded OS Training Kit
**Update*Rev.	Date			Reviser			Description*1.0	2004/01/05		Jai/Rss/Sin		First release******************************************************************************/

#include <stdlib.h>
#include <stdio.h>

#include <tk/tkernel.h>
#include <tm/tmonitor.h>
//#include <tk/sysdef.h>
#include <tk/sysmgr.h>
#include <tk/devmgr.h>
#include <libstr.h>
#include "id_no.h"
#include "motor.h"
#include "display.h"
#include "statemachine.h"


EXPORT ER display_task_init(void);
EXPORT ER motor_task_init(void);
void motor_task(INT stacd, VP exinf);
LOCAL ER Motor_speed(UB motor_num, UB speed);

#define M1 1
#define M2 2
#define M 1
//extern void motor_irq0();
//extern void motorint_task();

 B g_buff[128];

//LOCAL ID g_motor_mbxid;
ID g_M1dd = -1;
ID g_scrdd =-1;
//UB g_motor_stop;

 EXPORT void main (void)
{
	ID tsk_id =-1;
	ER er = 0;
	T_CTSK ctsk;

//	tm_putstring((B *)DEV_VERSION);

#if TRG_DEBUG
	tm_putstring("application main started\n");
#endif
//	注册驱动
	er = screen_drv(0, NULL);
	if (er < 0)
	{
		return;
	}
	er = motor_drv(0, NULL);
	if (er < 0)
	{
		return;
	}
	er = display_task_init();
	if (er < 0)
	{
//		tasks_cleanup();
		return;
	}
	//motor
	memset(&ctsk, 0, sizeof(T_CTSK));
	ctsk.tskatr = TA_HLNG | TA_RNG0;	ctsk.task = (FP)motor_task;	ctsk.itskpri = 2;
	ctsk.stksz = 1024 * 2;
	ctsk.sstksz = 1024 * 2;
	ctsk.exinf=0;
	er = tk_cre_tsk((T_CTSK*)&ctsk);//建立LedScan任务,接收key案件
	if (er < 0)
	{
		sprintf((B *)g_buff, "main -> tk_cre_tsk() error [%#x]\n", er);		tm_putstring(g_buff);
//		tasks_cleanup();
		return;
	}
	tsk_id = er;
	
	er = tk_sta_tsk(tsk_id, 0);
	if (er < 0)
	{
		sprintf((B *)g_buff, "main -> tk_sta_tsk() error [%#x]\n", er);		tm_putstring(g_buff);
		return;
	}
	
	//main task go to sleep forever never return
	tk_slp_tsk (TMO_FEVR);

#if TRG_DEBUG
	tm_putstring((UB *)"\n*** main task ended ***\n");
#endif
	return;
}






/*******************************************************************************Update*Motor application layer init motor task*Rev.	Date			Reviser			Description*1.1	2005/01/05		Jai/Rss/Sin		1st release******************************************************************************/
EXPORT ER motor_task_init(void)
{
	ER ercd;
	UB m1dev[] = {"MOTOR\0"};
	T_CMBX mbx;

	if (g_M1dd > 0)
	{
		return E_OK;
	}
	g_M1dd = -1;
	ercd = tk_opn_dev(m1dev, TD_UPDATE);	if (ercd < 0)	{		sprintf((B *)g_buff, "tk_opn_dev() error [%#x]\n", ercd);		tm_putstring(g_buff);		goto EXIT_INIT;	}	g_M1dd = ercd;
	
EXIT_INIT:
	return ercd;
}


/*******************************************************************************Update*motor application layer motor to receive user selection*Rev.	Date			Reviser			Description*1.0	2004/12/05		CLK/Rss/Sin		1st release
*1.1	2004/12/31		Jai/Rss/Sin		2nd release******************************************************************************/
LOCAL void motor_task(INT stacd, VP exinf)
{
	//MOTOR_MSG *p_motor_msg;			/* pointer to msg packet structure */
	//ID mbx_id = -1;
	ER ercd;
	B count=60;
	UB num=1;
	motor_task_init();
	while (count>30)
	{		/*speed*/
	num^=M;
	 Motor_speed(num+M,count);
	 tk_dly_tsk(50);
	 count--;
	 if (count ==30)count =60;
	}
#if TRG_DEBUG
	tm_putstring("motor_task ended\n");
#endif
	tk_exd_tsk();
}
/*******************************************************************************Update*Motor application layer change motor speed
**Rev.	Date			Reviser			Description*1.1	2005/01/05		Jai/Rss/Sin		1st release******************************************************************************/
LOCAL ER Motor_speed(UB motor_num, UB speed)
{
	MOTOR_SPEED motor_speed;//速度
	MOTOR_DIR motor_dir;    //方向
	ER ercd;
	INT sz;
	
	if (g_M1dd < 0)
	{
		return E_PAR;
	}
	memset(&motor_dir,0,sizeof(MOTOR_DIR));
	motor_dir.motor_num=motor_num;
	motor_dir.direction=motor_num;//1号则正向,2号则反向
	ercd = tk_swri_dev(g_M1dd,DN_MOTORDIR,(VP)&motor_dir,sizeof(MOTOR_DIR),&sz);
	
	if(speed>100)
		speed=20;
	
	motor_speed.motor_num = motor_num;
	motor_speed.speed = speed;
	ercd = tk_swri_dev(g_M1dd,DN_MOTORSPEED,(VP)&motor_speed,sizeof(MOTOR_SPEED), &sz);
	if (ercd < 0)
	{
		sprintf((B *)g_buff, "tk_swri_dev() error [%#x]\n", ercd);		tm_putstring(g_buff);
		return ercd;
	}
	return ercd;
}

EXPORT ER display_task_init(void)
{
	ER ercd;
	UB scrdev[] = {"SCREEN\0"};
	LCD_DRAW test_disp;	//与LCD设备有关的结构体 详见display.h
	INT sz;

	g_scrdd = -1;
	ercd = tk_opn_dev(scrdev, TD_UPDATE);                         		  //系统函数 任务打开
	if (ercd < 0)
	{
		sprintf((B *)g_buff, "tk_opn_dev() error [%#x]\n", ercd);
		tm_putstring(g_buff);
		goto EXIT_SCRINIT;
	}
	g_scrdd = ercd;

		ercd = tk_swri_dev(g_scrdd, DN_LCDCLEAR, (VP)NULL, 0, &sz);       //写设备 清空屏幕
		
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 0;
		test_disp.text_len = 11;
		sprintf((B *)test_disp.text, "LuoXingYuan");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,			  //写设备 把test_disp.text的内容写到LCD上
			sizeof(LCD_DRAW), &sz);
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 1;
		test_disp.text_len = 13;
		sprintf((B *)test_disp.text, "Motor Program");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
		
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 2;
		test_disp.text_len = 14;
		sprintf((B *)test_disp.text, "Written By LXY");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
			
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 3;
		test_disp.text_len = 12;
		sprintf((B *)test_disp.text, "2008-10-8-AM");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);

		tk_dly_tsk(100);
		

EXIT_SCRINIT:
	return ercd;
}

⌨️ 快捷键说明

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