AliOS-Things---ESP32devkitc 操作系统开发-Doc3

源码资源:
https://github.com/Gabrielle-OyO/AliOS-Things-rel_3.1.0/tree/main/AliOS
项目仓库:
https://github.com/Gabrielle-OyO/AliOS-Things-Term

1、下载相应软件完成AliOS开发环境的搭建,并成功编译hello world例程,将环境搭建过程及程序运行结果截图,并简单分析该程序所实现的功能。

这里使用XCOM串口监视器:
https://github.com/Gabrielle-OyO/AliOS-Things-Term/tree/main/XCOM%20V2.0

进入alios代码源指定文件夹的根目录:

cd C:\Repository\AliOS-Things-rel_3.1.0

生成默认配置:helloworld.c 到 esp32devkitc 板子上

aos make helloworld@esp32devkitc -c config

编译文件

aos make

 烧录文件

aos upload helloworld@esp32devkitc

选择串口

 --- Enter port index or full name: 1

 记得按Boot键

 烧录成功

 

 打开串口监视器,查看结果

/*
 * Copyright (C) 2015-2017 Alibaba Group Holding Limited
 */

#include <stdio.h>

#include <aos/kernel.h>

int application_start(int argc, char *argv[])
{
    int count = 0;
    printf("nano entry here!\r\n");

    while(1) {
        printf("hello world! count %d \r\n", count++);

        aos_msleep(1000);
    };
}

2、掌握AliOS程序代码的结构,简述AliOS程序代码的启动流程,启动过程中程序做了哪些工作。(通过分析源代码回答,可以使用sourceinsight软件分析源代码)。

• ESP32—ESP-IDF芯片的程序启动过程:
文件路径:

• app_main()—AliOS-Things-rel_3.1.0\platform\mcu\esp32\bsp\entry.c

• app_entry()—AliOS-Things-rel_3.1.0\platform\mcu\esp32\bsp\entry.c

• application_start()

这里使用sourceinsight工具进行代码分析:

https://github.com/Gabrielle-OyO/AliOS-Things-Term/blob/main/sourceinsight4.rar

3、设计程序,创建3个任务,优先级分别为35、34、33,每个任务分别打印“task1 run!”, “task2 run!”,“task3 run!”,打印完后休眠r1秒钟时间,然后再次打印。要求3个任务使用同一个任务函数,通过传入不同的字符串参数,实现不同内容的打印。

(1)实现程序,观察输出结果,说明任务如何调度运行,为什么?

/*
 * Copyright (C) 2015-2017 Alibaba Group Holding Limited
 */
#include <k_api.h>
#include <stdio.h>
#include <aos/kernel.h>

//定义函数
aos_task_t task1;
aos_task_t task2;
aos_task_t task3;

//循环输出
void func(void * arg)
{
	while(1)
	{
		printf("%s\r\n",(char*)arg);
		aos_msleep(1000);
	}
}
int application_start(int argc, char *argv[])
{
    int tmp=0;
    printf("nano entry here!\r\n");
	aos_task_new_ext(&task1,"task1", func,(void*)"task1 run!", 8192,35);//优先级最低,最后输出
	aos_task_new_ext(&task2,"task2", func,(void*)"task2 run!", 8192,34);//优先级其次
	aos_task_new_ext(&task3,"task3", func,(void*)"task3 run!", 8192,33);//优先级最高,首先输出
    while(1) {
        printf("maintask print %d\r\n",tmp);
		tmp++;
        aos_msleep(1000);
    };
}

(2)在(1)的基础上,当程序运行一段时间后,挂起任务2,输出有什么改变?运行一段时间后再恢复任务2,输出有什么变化?

循环输出8次任务1、2、3;挂起任务2;循环输出10次任务1、2;恢复任务2;循环输出任务1、2、3

/*
 * Copyright (C) 2015-2017 Alibaba Group Holding Limited
 */
#include <k_api.h>
#include <stdio.h>
#include <aos/kernel.h>

aos_task_t htask1;
aos_task_t htask2;
aos_task_t htask3;

void func(void * arg)
{
	while(1)
	{
		printf("%s\r\n",(char*)arg);
		aos_msleep(1000);
	}
}
int application_start(int argc, char *argv[])
{
    int tmp=0;
    printf("nano entry here!\r\n");
	aos_task_new_ext(&htask1,"task1", func,(void*)"task1 run!", 8192,35);
	aos_task_new_ext(&htask2,"task2", func,(void*)"task2 run!", 8192,34);
	aos_task_new_ext(&htask3,"task3", func,(void*)"task3 run!", 8192,33);
    while(1) {
        printf("maintask print %d\r\n",tmp);
		tmp++;
		if(tmp==10)
			krhino_task_suspend((ktask_t *)(htask2.hdl));//挂起任务2
		if(tmp==20)
			krhino_task_resume((ktask_t *)(htask2.hdl));//恢复任务2
        aos_msleep(1000);
    };
}

(3)在(1)的基础上,将3个任务的优先级都改为33,观察输出结果,说明任务如何调度运行,为什么?

按照语句顺序输出,优先级相同

/*
 * Copyright (C) 2015-2017 Alibaba Group Holding Limited
 */
#include <k_api.h>
#include <stdio.h>
#include <aos/kernel.h>

//定义函数
aos_task_t task1;
aos_task_t task2;
aos_task_t task3;

//循环输出
void func(void * arg)
{
	while(1)
	{
		printf("%s\r\n",(char*)arg);
		aos_msleep(1000);
	}
}
int application_start(int argc, char *argv[])
{
    int tmp=0;
    printf("nano entry here!\r\n");
	aos_task_new_ext(&task1,"task1", func,(void*)"task1 run!", 8192,33);
	aos_task_new_ext(&task2,"task2", func,(void*)"task2 run!", 8192,33);
	aos_task_new_ext(&task3,"task3", func,(void*)"task3 run!", 8192,33);
    while(1) {
        printf("maintask print %d\r\n",tmp);
		tmp++;
        aos_msleep(1000);
    };
}

4、将RHINO_CONFIG_TIME_SLICE_DEFAULT定义为不同的值,说明在同优先级任务调度时,该宏的作用?自己设计程序,通过程序输出结果说明。

默认优先级,值越大优先级越低

/*
 * Copyright (C) 2015-2017 Alibaba Group Holding Limited
 */

#include <stdio.h>

#include <aos/kernel.h>

volatile int count1=0;
volatile int count2=0;
aos_task_t htask1;
aos_task_t htask2;


void func1(void * arg)
{
	while(1)
		count1++;
}
void func2(void * arg)
{
	while(1)
		count2++;
}
int application_start(int argc, char *argv[])
{
    printf("nano entry here!\r\n");
	aos_task_new_ext(&htask1,"task1", func1,0, 8192,33);
	aos_task_new_ext(&htask2,"task2", func2,0, 8192,33);
    while(1) {
        printf("count1=%d,count2=%d\r\n",count1,count2);
        aos_msleep(1000);
    };
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ML_GearYe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值