?? main.c
字號:
/*
* created by hany 20050124
*
* test the api about synchronization and communication
*
*
*
* about eventflag:
* tk_cre_flg,tk_del_flg, tk_set_flg, tk_clr_flg, tk_wai_flg, tk_ref_flg
*
*
*/
#include <basic.h>
#include <tk/tkernel.h>
#include <LPC2106.h>
#define LEDCON1 0x00000400 //p0.10引腳控制LED1,低電平點亮
#define LEDCON2 0x00000800 //p0.11引腳控制LED2,低電平點亮
#define LEDCON3 0x00001000 //p0.12引腳控制LED3,低電平點亮
#define LEDCON4 0x00002000 //p0.13引腳控制LED4,低電平點亮
#define LEDCON 0x00003c00 //p0.10~p0.13
ID taskid1 = -1;
ID taskid2 = -1;
ID flgid = -1;
/********************************* time delay ****************************************/
void DelayNS(UH dly)
{
UH i;
for(; dly>0; dly--)
{
for(i=0; i<2000; i++);
}
}
/********************************* time delay ****************************************/
/********************************* LED control ***************************************/
/******************************* shine 2 times **************************************/
void LedCon(UW Ledcon)
{
UH i;
IOSET = Ledcon;
for(i=0;i<2;i++)
{
IOSET = Ledcon;
DelayNS(1001);
IOCLR = Ledcon;
DelayNS(1001);
}
IOSET = Ledcon;
}
/********************************* LED control ***************************************/
/********************************* task1(below) **************************************/
void task1(INT stacd, VP exinf)
{
ER ercd = 0;
T_CFLG pk_cflg;
T_RFLG pk_rflg;
pk_cflg.exinf = 0x12345678;
pk_cflg.flgatr = TA_TPRI | TA_WMUL;
pk_cflg.iflgptn = 0x00000001;
pk_rflg.exinf = 0;
pk_rflg.wtsk = -1;
pk_rflg.flgptn = 0;
flgid = tk_cre_flg(&pk_cflg); //如果tk_cre_flg好用,則LED1閃爍2次
if(flgid>=0)
{
LedCon(LEDCON1);
}
ercd = tk_sta_tsk(taskid2,102);
ercd = tk_ref_flg(flgid,&pk_rflg); //如果tk_ref_flg好用,則LED3閃爍2次
if(ercd==E_OK)
{
LedCon(LEDCON3);
}
ercd = tk_set_flg(flgid,0x00000020); //如果tk_set_flg好用,則此時轉入task2,LED2閃爍2次,接著轉回task1,LED4閃爍2次
if(ercd==E_OK) //這個if語句并不緊接著tk_set_flg執行
{
LedCon(LEDCON4);
}
ercd = tk_chg_pri(TSK_SELF,100);
ercd = tk_clr_flg(flgid,0x00000000); //如果tk_clr_flg好用,則LED3閃爍4次
if(ercd==E_OK)
{
LedCon(LEDCON3);
LedCon(LEDCON3);
}
ercd = tk_del_flg(flgid); //如果tk_del_flg好用,則LED4閃爍4次
if(ercd==E_OK)
{
LedCon(LEDCON4);
LedCon(LEDCON4);
}
tk_exd_tsk();
}
/********************************* task1(above) ************************************/
/********************************* task2(below) ************************************/
void task2(INT stacd, VP exinf)
{
ER ercd = 0;
UINT *pk_flgptn = 0;
ercd = tk_wai_flg( flgid, 0x00000021, TWF_ANDW, &pk_flgptn, 9000 );
if(ercd==E_OK) //如果tk_wai_flg好用,則LED2閃爍2次
{
LedCon(LEDCON2);
}
ercd = tk_chg_pri(TSK_SELF,90);
//tk_dly_tsk(1200); //如果用這個dly,則可不用那兩個chgpri,但dly的時間必須
//設定得和LED閃爍兩次的時間大體相同,須略少于LED閃爍的時間
ercd = tk_wai_flg( flgid, 0x00000043, TWF_ORW, &pk_flgptn, 9000 );
if(ercd==E_OK) //如果tk_wai_flg好用,則LED1~LED4閃爍2次
{
LedCon(LEDCON);
}
tk_exd_tsk();
}
/********************************* task2(above) ************************************/
int main(void)
{
T_CTSK tsk1,tsk2;
ER ercd = 0;
PINSEL0 = 0x00000000; // 設置所有管腳連接GPIO(p0.0~p0.15)
IODIR = LEDCON; // 設置p0.10~p0.13控制口為輸出
IOSET = LEDCON; // 設置p0.10~p0.13控制口為高電平,LED0~LED4不亮
tsk1.exinf = (VP)0x74736574;
tsk2.exinf = (VP)0x74736332;
tsk1.tskatr = TA_HLNG | TA_RNG0; //由于這里沒有MMU,所以系統將所有的RNGn都按RNG0來處理
tsk2.tskatr = TA_HLNG | TA_RNG0;
tsk1.task = task1;
tsk2.task = task2;
tsk1.itskpri = 80;
tsk2.itskpri = 70;
tsk1.stksz = 512;
tsk2.stksz = 512;
taskid1 = tk_cre_tsk(&tsk1);
taskid2 = tk_cre_tsk(&tsk2);
ercd = tk_sta_tsk(taskid1, 101);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -