杰理AC690X(1)创建任务
使用杰理690X系列时,依据实际需求可能需要创建自定义任务,下面根据本人的理解叙述如何创建自定义任务,文章如存在错误请各位批评指正,下面直接进入正题。
1.函数初始化
参考Main_Task初始化函数进行My_Task初始化,其中TaskMyPrio是宏定义的,杰理690X留给用户开发任务的优先级是2-10,如果不在此范围内可能影响其他任务的运行;MY_TASK_NAME和MY_TASK_STACK_SIZE自行参考Main_Task初始化进行定义。
int my_task_init(void)
{
u32 err;
err = os_task_create_ext(MyTask,
(void*)0,
TaskMyPrio,
10
,MY_TASK_NAME,
MY_TASK_STACK_SIZE
);
return 0;
}
2.任务函数创建
在 my_task_init初始化时,我们函数名为MyTask,因此代码如下所示:
static void MyTask(void *p)
{
int msg[6];
while(1)
{
//memset(msg,0x00,sizeof(msg));
//os_taskq_pend(0, ARRAY_SIZE(msg), msg);
clear_wdt();
printf("My Task\n");
}
}
MyTask()中的注释部分为消息接收,若去掉注释需使用如下语句触发任务执行会执行一次。
os_taskq_post(MY_TASK_NAME,MSG)
在增加上述两个函数之后 ,其中my_task_init()参考main_task_init()在board.c中的board_main()中进行调用,代码如下所示:
main_task_init();
my_task_init();
OSStart();
3.工程文件添加
如果想在独立的.c文件中创建任务需要在工程代码中添加相应的文件及路径,下面大致介绍一几个重要步骤:
a.在下图中创建mytask文件夹存放.c文件,在include目录下创建mytask文件夹用于存放对应的.h文件;
b:在下图中分别右击apps_soundbox和include选择Add files secursively,在apps_soundbox添加.c文件对应的文件夹,在include添加.h文件对应的文件夹;
c:在CodeBlocks中右击工程名,选择Build Options,在Search directories中把.h对应的文件路径添加即可;
最后贴出mytask.h和mytask.c文件代码,如下所示:
mytask.h:
#ifndef _MY_TASK_
#define _MY_TASK_
extern int my_task_init(void);
#endif
mytask.c:
#include "sdk_cfg.h"
#include "includes.h"
#include "main_key.h"
#include "rtos/os_api.h"
#include "common/app_cfg.h"
#include "dev_manage/dev_ctl.h"
#include "file_operate/file_op_err.h"
#include "rtos/task_manage.h"
#include "usb_device.h"
#include "key_drv/key.h"
#include "common/flash_cfg.h"
#include "vm/vm_api.h"
#include "ui/ui_api.h"
#include "dac/dac_api.h"
#include "linein.h"
#include "sys_detect.h"
#include "bluetooth/avctp_user.h"
#include "key_drv/key_drv_io.h"
#include "ui/led/led.h"
#include "key_drv/key_voice.h"
#include "dac/dac.h"
#include "rtc/rtc_api.h"
#include "update.h"
#include "clock.h"
#include "irq_api.h"
#include "rcsp/rcsp_interface.h"
#include "key_drv/key_drv_ad.h"
#include "mytask.h"
static void MyTask(void *p)
{
int msg[6];
while(1)
{
memset(msg,0x00,sizeof(msg));
os_taskq_pend(0, ARRAY_SIZE(msg), msg);
clear_wdt();
printf("My Task\n");
}
}
int my_task_init(void)
{
u32 err;
err = os_task_create_ext(MyTask,
(void*)0,
TaskMyPrio,
10
,MY_TASK_NAME,
MY_TASK_STACK_SIZE
);
return 0;
}
4.结束
推荐一个学习JL690X的学习博客690X学习,首次尝试写点东西出来供大家学习参考,如存在错误和不适当之处望大家批评指正,谢谢。