//这是事件发生,将要调用的服务函数
void flash_led(void)
{
uint32_t led=0x11111111;
void *my_para;
while(1)
{
my_para = djy_get_event_para();
if(*(u32*)my_para ==1)
{
pg_gpio_reg->GPBDAT |= (led & 0x1e0);
pg_gpio_reg->GPBDAT &= (led | 0xfe1f);
led <<=1;
if((led&0xf) == 0)
led += 1;
}else
{
pg_gpio_reg->GPBDAT &= 0xfe1f;
}
//执行本句后,事件将被阻塞,由于被同步的事件类型就是本事件的事件类型,
//所以同步条件就是:再次发生本类型事件。
//参数 ‘1’表示只要发生一次事件就可以了
//参数500表示如果一直不发生,500mS后结束等待
//关于事件类型弹出同步,参见《都江堰操作系统与嵌入式系统设计》的第5.3节
djy_evtt_pop_sync(djy_my_evtt_id(),1,500*mS);
}
}
//本应命名为main的,但调试器总是默认这是整个程序的入口点,罢了
void djy_main(void)
{
uint16_t evtt_flash_led;
uint32_t reg;
u32 parameter;
//对GPIO口配置
reg = pg_gpio_reg->GPBCON;
reg &= 0xfffc03ff;
reg |= 0x00015400;
pg_gpio_reg->GPBCON = reg; //PB5~8 set to output for led
reg = pg_gpio_reg->GPBUP;
reg |= 0x1e0;
pg_gpio_reg->GPBUP = reg; // The pull up function is disabled
//注册跑马灯事件
evtt_flash_led = djy_evtt_regist(true,cn_prio_RRS,0,1,
flash_led,10,NULL);
parameter = 1;
//弹出跑马灯事件,开辟线程,调用服务函数flash_led
djy_event_pop(evtt_flash_led,false,NULL,0,¶meter,
sizeof(parameter),0,0);
}