杰理AC692X学习-三种添加用户代码的方式

有时候开发AC692X需要添加很多自己写的代码,不方便使用sdk提供的部分部分代码。
1 利用time0的回调注册

/* time为时间片,多少个时间片回调一次fun,time的时基是2ms */
struct loop_detect_handler {
    int time;
    void (*fun)();
};
static void delay_1s_count(viod)
{
    printf("delay_1s_count\n");

}
const struct loop_detect_handler delay_1s ;
LOOP_DETECT_REGISTER(delay_1s ) = {
    .time = 500,
    .fun  = delay_1s_count,
};

2 利用杰里的消息推送机制,自定义消息参考链接,msg.h文件下接口函数

bool get_event_status(u32 event);
int task_get_msg(u16 timeout, int len, int *msg);
int task_post_msg(char *name, int argc, ...);
int task_post_event(char *name, int argc, ...);
void task_message_init();
void task_clear_all_message(void);
/*
列:
msg = USER_MSG_TEST;
task_post_msg(NULL, 1, msg);

在执行任务下 switch中添加自己的信息
case USER_MSG_TEST:
	do something;
	break;
*/

3 在switch前添加自己代码,程序只要没有调用 task_common_msg_deal中task_switch 就不会退出这个while循环,可以一直执行自己填加的代码

void task()
{
	/* 模块初始化 */
	while(1){
		/* 获取消息队列中消息 */
		error = task_get_msg(0, 2, msg);
		/* 这里调用task_common_msg_deal可以实现各种外设接入或者按键跳转模块
		在调用task_switch这个函数之后成功,这个函数即可完成模块的切换,
		task_common_msg_deal会返回 false,使得当前模块的函数被return*/
		if (task_common_msg_deal(NULL, msg[0]) == false) {
            return ;
        }
        /*
			do something
		*/
		switch(msg[0]){
		/* 各种消息处理 */
		}
	}
}

4 中断 ,这部分用的少,有用到过的就是串口中断和定时器中断,在之前相应的文章中有。

你可能感兴趣的:(杰理AC692x学习)