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

📄 my_task_led.c

📁 基于T-ENGINE环境
💻 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 + -