【平头哥RVB2601创意应用开发】记录一下hello worl系统启动流程
[复制链接]
【前言】前面一阵子,看了入门手册,拉取例子运行,或者改改,就可以运行了,但是真正要从头写自己想要的东西,就会遇到很多麻烦,今天放假,静下心,理清一下板子的启动流程,给自己记录起来,以便后面随时翻看,感觉论坛这里就是我的记事本。由于对操作系统的理解还没有算入门。所以只是记录给我自己看,如果有讲得不对,请无视,当路过。
现在的芯片运行频率、内存逐渐的强大,所以用操作系统就会很方便。平头哥这款开发板,是用他们开发的YoC平台(YoC概述 · GitBook (t-head.cn))这里有详细描述的文档,建议大家一定要先去熟悉一下,少走弯路。
helloworld例程是用集成Rhino内核来搭建的,当然也可以用freeRTOS,好象也有一个例程。
查看了例程的源代码,程序的启动入口主函数应该是在:..\__workspace_pack__\aos\v7.4.3\src目录下的main.c的pre_main函数。其代码如下:
int pre_main(void)
{
/* kernel init */
aos_init();//内核初始化
#ifdef CONFIG_OS_TRACE
trace_init_data();
#endif
/* 创建一个app_task 任务*/
aos_task_new_ext(&app_task_handle, "app_task", application_task_entry,
NULL, INIT_TASK_STACK_SIZE, AOS_DEFAULT_APP_PRI);
/* kernel start */
aos_start(); //启动任务
return 0;
}
//application_task_entry数里启动了app\src下的main()函数:
static void application_task_entry(void *arg)
{
main();//这里才是给用户的程序入口
aos_task_exit(0);
}
这个跟我们以往用STM32祼机工程不同的就是,在执行main()函数之前已经完成内核的初始化。内核初始跟踪进去还有很多的函数,看着头大,就只看app下main的了吧
main.c中它先引入头件:<aos/aos.h> 、"aos/cli.h" 其中cli为控制台服务所必须。
程序建了一个Init的文件夹,里面分别有init.c 和cli_cmd.c.
init.c中的board_yoc_init函数,对串口的GPIO进行了初始化,并初始化串口0,初始化了日志服务,并设定为打印所有信息。
最后初始化了oled,显示了开机图片。在while(1)循环中每隔1秒打印一行字符串。完成程序的流程。
【总结】YoC的启动流程:Rhino内核初始——》创建main任务并启动给用户的main函数——》配置用于串口(终端)的GPIO——>>配置串口0为波特率115200 接收缓冲区为128——》初始化、配置日志服务——》初始化OLED——》输出hello world。
建议还是脑补一下这个系统的知识,想要弄通这块开发板,还得花很多时间,掉很多头发。。。。。
|