有时候开发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 中断 ,这部分用的少,有用到过的就是串口中断和定时器中断,在之前相应的文章中有。