AC695x学习笔记(2):软件大致流程

目录

一、程序入口main

二、模式启动/选择

三、任务消息/操作处理

3.1 消息事件响应处理

四、模式切换


一、程序入口main

        程序的入口函数main( )位于init.c文件,而main主函数中调用setup_arch( )进行了内存/时钟等初始化,并创建了模式任务处理,并在任务处理app_task_handler( )中分别分别进行了任务的初始化app_init( )和任务的调度处理app_main( )

主函数main( ) 代码如下(示例):

int main()
{


#if(CONFIG_CPU_BR25)

#if (TCFG_DEC2TWS_ENABLE ||RECORDER_MIX_EN || TCFG_DRC_ENABLE || TCFG_USER_BLE_ENABLE || TCFG_DEC_APE_ENABLE || TCFG_DEC_FLAC_ENABLE || TCFG_DEC_DTS_ENABLE || TCFG_USER_EMITTER_ENABLE)
    clock_set_sfc_max_freq(100 * 1000000, 100 * 1000000);
#else

#if ((TCFG_AEC_ENABLE) && (TCFG_USER_TWS_ENABLE))
    clock_set_sfc_max_freq(80 * 1000000, 80 * 1000000);
#else
    clock_set_sfc_max_freq(64 * 1000000, 64 * 1000000);
#endif

#endif

#endif

    wdt_close();

    os_init();

    setup_arch();

    board_early_init();

    task_create(app_task_handler, NULL, "app_core");

    os_start();

    local_irq_enable();

    while (1) {
        asm("idle");
    }

    return 0;
}

创建的任务处理函数app_task_handler( )代码如下(示例):

static void app_task_handler(void *p)
{
    app_init();
    app_main();
}

  • steup_arch( )函数:该函数主要进行内存的初始化、看门狗初始化、时钟的初始化、初始io及系统时间的初始化等芯片的初始化功能(大致理解为程序的运行环境做准备)

  • app_init( )函数:该函数则是为任务(模式)进行准备,进行解码初始化、按键开机检测和CUP复位部分操作等    

  •  app_main( )函数:任务主函数app_main则在app_mian.c中进行处理,其中比较重要的是对开机初始模式进行设置,并循环根据app_task_loop( )获取并设置的最新的模式任务     

二、模式启动/选择

        当开始通过app_main( )函数设置首任务或进行任务模式切换时,便会执行app_task_loop( )判定并开始相应模式的任务,当发生任务模式更改时,会根据变量app_curr_task跳转执行:

三、任务消息/操作处理

        所有app模式/任务主要可分为三部分:模式初始化--消息处理--模式退出。当初始化完毕后变获取消息,当有消息处理推送出来时,则进行响应处理,直到退出该模式

music模式代码如下(示例):

3.1 消息事件响应处理

        消息处理又分为模式消息处理和公共消息处理,当有消息事件推出时,先在当前模式进行处理响应的消息后,若不进行处理(返回false)后才会丢到公共事件中去判定处理。

        以music模式为例:当推送按键消息KEY_VOL_UP出来后,会先在按键消息入口函数music_key_event_opr( )中执行并判定消息是否已经处理后,若未处理则推送到按键公共事件处理函数app_common_key_msg_deal( )进行处理

music模式的模式消息事件处理如下(示例):

 公共消息处理如下(示例):

四、模式切换

        当需要切换模式时,可根据app_task_switch_to( )函数进行切换。包括当前任务的获取/模式配置表/跳转下一模式等操作函数均在app_task_switch.c文件中进行处理

(1)app_task_switch_to( )函数:用于切换到指定模式,通常在切换到指定模式时会对跳转的模式进行条件判断,以及退出的模式(如蓝牙后台则不需退出蓝牙)等进行判定后,才可正常跳转

(2)app_task_switch_prev( )函数和app_task_switch_next( )函数:分别对应跳转到上一个模式、下一个模式的操作。进行上、下一模式切换时是通过遍历模式任务列表,因此需将要切换的模式添加到列表数组中方可进行操作,未添加的无法通过上下模式切换函数进行切换操作。

(3)app_get_curr_task( )函数:主要用于判定当前的任务模式;

(4)app_task_switch_check( )函数:模式进入检查,有一些需设备在线的情况(如音乐模式需TF卡/U盘播放,录音模式需内存卡储存等),则需在进入相应模式时先判断有无设备在线,有设备在线可进入,没有设备时则进入下一个模式

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值