查看: 1401|回复: 0

GD32407Z-NB-IOT试用--熟悉LiteOS使用

[复制链接]
  • TA的每日心情

    2016-12-7 16:21
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-6-19 08:42:35 | 显示全部楼层 |阅读模式
    分享到:
    板子运行demo跑起来后继续对代码进行探索。代码基于LiteOS进行编写。那先捋一捋LiteOS使用时个什么流程。
        基于NB-IOT-Park 例程进行分析。首先定位到main函数:
      
    int main(void){    UINT32 uwRet;      nvic_priority_group_set(NVIC_PRIGROUP_PRE3_SUB1);     uwRet = LOS_KernelInit();    if (uwRet != LOS_OK) {        return LOS_NOK;    }    /* Enable LiteOS system tick interrupt */    LOS_EnableTick();    /*        Notice: add your code here        here you can create task for your function         do some hw init that need after systemtick init     */    LOS_EvbSetup();//init the device on the dev baord    LOS_InitTask_Entry();    /* Kernel start to run */    LOS_Start();    for (;;);}     上面的代码大概做了这么几件事:    1、GD32的中断向量组的设置   
        2、初始化 LiteOS   
        3、配置滴答定时器作为LiteOS的心跳  
        4、配置板载的外设UART、LED、KEY   
        5、创建一个初始任务,在初始任务中新建其他任务。
        6、启动LiteOS
       这几个流程和一般的实时操作系统都比较类似,那么接下来看看是如何创建任务的:
       
    void LOS_InitTask_Entry(void){    UINT32 uwRet;    TSK_INIT_PARAM_S stTaskInitParam;    (VOID)memset((void *)(&stTaskInitParam), 0, sizeof(TSK_INIT_PARAM_S));    stTaskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)LOS_Init_Tsk;    stTaskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE;    stTaskInitParam.pcName = "InspectTsk";    stTaskInitParam.usTaskPrio = 9;    uwRet = LOS_TaskCreate(&g_uwInitTaskID, &stTaskInitParam);        if (uwRet != LOS_OK)    {        return;    }        return;}      上面这个函数是创建一个任务,然后在这个任务里面去创建其他任务。有几点需要注意:       1、创建任务需要什么?
                LOS_TaskCreate(UINT32 *puwTaskID, TSK_INIT_PARAM_S *pstInitParam)
               这个是创建任务的函数原型,入口参数为TaskID以及用于任务初始化的参数Param。
           2、TASKID和INIT_PARAM需要怎么设置?
               回到上面的代码,LOS_TaskCreate(&g_uwInitTaskID, &stTaskInitParam);   其中的g_uwInitTaskID是一个全局变量。重点在于stTaskInitParam的配置。配置了如下内容:
                1) 任务的执行函数
                2) 分配给任务的栈空间
                3) 设置了任务的名称
                4) 配置任务的优先级
           创建任务试用LiteOS 创建任务循环打印“GD32407Z-NB-IOT”
           1、创建任务
          
    void LOS_DIY_Task_Entry(void){    UINT32 uwRet;    TSK_INIT_PARAM_S stTaskInitParam;    (VOID)memset((void *)(&stTaskInitParam), 0, sizeof(TSK_INIT_PARAM_S));    stTaskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)LOS_DIY_Test_Tsk;    stTaskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE;    stTaskInitParam.pcName = "diyTsk";    stTaskInitParam.usTaskPrio = 8;    uwRet = LOS_TaskCreate(&g_uwDIYTaskID, &stTaskInitParam);        if (uwRet != LOS_OK)    {        return;    }        return;}              2、编写执行函数:
                
    void LOS_DIY_Test_Tsk(void){    while(1)    {        LOS_EvbUart1Printf("GD32407Z-NB-IOT\n\r");        LOS_TaskDelay(1000);    }}              3、添加到初始任务:
                
    void LOS_Init_Tsk(void){    gd_eval_led_init(LED1);    gd_eval_led_init(LED2);    gd_eval_led_off(LED1);    gd_eval_led_off(LED2);    //    LOS_EvbKeyInit();    LOS_MPU6050Task_Entry();    LOS_TamperTask_Entry();    LOS_IrDA_Task_Entry();    //LOS_NBIOT_Task_Entry();    LOS_DIY_Task_Entry();        LOS_TaskDelete(g_uwInitTaskID);}                编译下载效果如下:

    看时间戳,1S一次。
    接下来的试用就开始琢磨NB-IOT了....
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 10:24 , Processed in 0.115916 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.