📄 my_task_led.c
字号:
/******************************************************************************
*LED AND LCD.c
*Training board application
*EOSTK - Embedded OS Training Kit
*Copyright (C) 2004 T-Engine Application Development Centre (TEADEC),
* Renesas System Solutions Asia PTE. LTD. (RSS)
*
*
*Update
*Rev. Date Reviser Description
*1.0 2004/12/25 Jai/Rss/Sin First release
******************************************************************************/
#include <tk/tkernel.h> //T-KERNEL系统调用,基本的数据类型
#include <tm/tmonitor.h> //TMONITOR相关调用
#include <tk/sysdef.h> //系统结构的数据类型
#include <libstr.h> //提供str的一些操作函数
#include <stdio.h>
#include "led_header.h" //导入所用设备的头文件
#include "display.h" //导入所用设备的头文件
//#define led_rw (*(unsigned char *)0x00800200) //LED 控制 地址定义
void LED_Task(INT stacd, VP exinf); //跑马灯任务
EXPORT ER display_task_init(void); //LED显示
ID led_tskid=-1; //led任务ID
B g_buff[128]; //串口输出调试信息
ID g_scrdd; //LCD设备ID
/******************************************************************************
*Update
*Main application layer (applicatin entry point)
*start task and go to sleep forever
*Rev. Date Reviser Description
*1.0 2005/01/05 Jai/Rss/Sin First release
******************************************************************************/
//与操作系统有关的内容详见 实验手册\TEF020-S001-01.00.00.pdf
//与设备驱动有关的内容详见 各个驱动工程内 *_driver.c *_common.c
EXPORT void main (void)
{
ID tsk_id;
ER er = 0;
T_CTSK ctsk;
#if TRG_DEBUG
tm_putstring("application main started\n");
#endif
// 注册驱动
er = screen_drv(0, NULL); //screen_drv(0,NULL)显示设备注册--LCD_driver.c
if (er < 0)
{
return;
}
if (initLED())//
{
return ;
}
er = LED_drv(0, NULL); //LED_drv(0, NULL)LED设备注册函数--LED_driver.c
if (er < 0)
{
return;
}
er = display_task_init(); //LCD显示
if (er < 0)
{
return;
}
//任务注册
memset(&ctsk, 0, sizeof(T_CTSK));
ctsk.tskatr = TA_HLNG | TA_RNG0; //任务属性
ctsk.task = (FP)LED_Task; //任务函数名
ctsk.itskpri = 2; //任务优先级
ctsk.stksz = 1024 * 2; //用户堆栈设置
ctsk.sstksz = 1024 * 2; //系统堆栈设置
ctsk.exinf=0; //参数 不传入参数设置为0
er = tk_cre_tsk((T_CTSK*)&ctsk); //建立LedScan任务
if (er < 0)
{
return;
}
led_tskid = er;
er = tk_sta_tsk(led_tskid, 0); //任务开始
if (er < 0)
{
return;
}
tk_slp_tsk (TMO_FEVR); //main task go to sleep forever never return
#if TRG_DEBUG
tm_putstring((UB *)"\n*** main task ended ***\n"); //串口输出调试信息(实验中没有使用串口和电脑相连接)
#endif
return;
}
void LED_Task(INT stacd, VP exinf)
{
INT sz;
UB i=1;
LED_UPDATE test_disp; //与LED设备有关的结构体 详见led_header.h
UB scrdev[]={"LED\0"};
ER ercd;
ID LEDdd;
LEDdd = tk_opn_dev(scrdev, TD_UPDATE); //设备打开 scrdev--设备名(设备注册函数中的设备名)
//TD_UPDATE--打开方式(读写方式打开)
for(i=1;i<=8;i++)
{
memset(&test_disp, 0, sizeof(LED_UPDATE));
test_disp.LED_Num=i;
test_disp.On_Off=1; //详见 实验手册\TEF020-S001-01.00.00.pdf
tk_swri_dev(LEDdd,DN_LEDDRAW,(VP)&test_disp,sizeof(LED_UPDATE),&sz);//操作系统提供的写设备函数
//LEDdd--设备ID
//DN_LEDDRAW--操作方式
//test_disp--所传入的内容
//sizeof(LED_UPDATE)--所传入内容的大小
//sz 实际读入内容的大小
}
i=1;
while(1)
{
if( i==9 )
i=1;
memset(&test_disp, 0, sizeof(LED_UPDATE));
test_disp.LED_Num=i;
test_disp.On_Off=0;
tk_swri_dev(LEDdd,DN_ONELEDDRAW,(VP)&test_disp,sizeof(LED_UPDATE),&sz);
i++;
tk_dly_tsk(150);
}
}
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 = 11;
sprintf((B *)test_disp.text, "Led 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 = 20;
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 = 9;
sprintf((B *)test_disp.text, "2008-10-6");
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 + -