📄 my_task_motor.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 + -