HS6621CG定时器事件调度

例程

生成一个定时器事件,每隔100毫秒运行一次函数

co_timer_t simple_timer;

void wifi_timer_handler(co_timer_t *timer, void *param)
{
	/* 这里是定时器事件回调函数 */
}

int main(void)
{
	/* 初始化 */
    ble_stack_config();
    hardware_init();

	rwip_init(RESET_NO_ERROR);
	
	co_power_register_sleep_event(power_sleep_event_handler);		//低功耗回调函数
	
	/* 包含广播 */
	appm_init();
	pmu_lowpower_prevent(PMU_LP_USER);								//拒绝低功耗
	
	/* 设置定时器事件 */
	co_timer_set(&simple_timer, 			//定时器事件
				100, 						//定时事件,单位ms
				TIMER_REPEAT, 				//重复运行
				wifi_timer_handler, 		//事件执行函数
				NULL);						//参数
	
	while(1){
		rwip_schedule();
	}
}

一、Schedule

事件管理

1.先取出最高优先级 task 的消息事件,该消息从消息队列中 pop 出来
2.根据 task 的状态和消息 ID 来得到对应的 handler
3.执行该 handler 回调
4.根据回调的返回值对消息进行处理
	1)如果返回 KE_MSG_CONSUMED,则内核free掉该消息。
	2)如果返回 KE_MSG_NO_FREE,则内核不处理该消息,但该消息也不会重新放到消息队列,即内核不能再从消息队列中获得该消息。
	3)如果返回 KE_MSG_SAVED,则内核不free该消息,并且将该消息重新入列。

二、TIMER

2.1 定时单位

1ms,RW内核提供一个定时器。对定时器的初始化等工作是在BLE初始化内部的,不需要用户编程设置。用户只需要调用RW内核的TIMER接口即可。

2.2 设置timer

/**
 * @brief Setup a software timer with millisecond
 *
 * @param[in] timer  the timer object (must be static or global variable)
 * @param[in] delay  it uint is 1ms
 * @param[in] mode  one shot or repeat
 * @param[in] callback  expire callback
 * @param[in] param  params
 *
 * @return false: Set timer fail;
 *         true: Set timer success
 **/
bool co_timer_set(co_timer_t *timer, uint32_t delay, co_timer_mode_t mode,
        co_timer_callback_t callback, void *param);

当时间到达时,RW 内核会发送 timer_id 到目标 task 的消息队列。当内核 schedule 时即会执行定时器相应的回调。
主函数中只有一个 rwip_schedule() 事件管理函数,所有动作都在定时器回调函数中执行,执行完成后才会执行下一次回调函数,串口中断,GPIO中断都能够响应。

  • 初入职场的新人,网上这颗芯片的资料较少,这只是我在工程中自己的一些体会,如有不足之处还望多多包涵,也欢迎交流
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值