为了开发的方便,还是习惯性配一下Eclipse的环境。这里选择了安信可的方案。官网的介绍。。。

安信可 ESP 系列一体化开发环境是安信可科技为方便广大用户而推出的基于 Windows + Cygwin + Eclipse + GCC 的综合 IDE 环境。

管理员权限打开配置软件,配置好各个路径即可。

  • exlipse
  • cygwin
  • IDF

导入makefile project。

  1. 选择 File→Import
  2. 点开C/C++分支,并选中Existing Code as Makefile Projec
  3. 去除C++支持,选中Cygwin GCC
  4. 点击Browser,选中 esp-idf-template所在的目录
  5. 点击Finish完成 esp-idf-template的导入

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"

void helloworld_task(void *pvParameter)
{
    while(1)
    {
        printf("Hello world!\r\n");
        vTaskDelay(1000 / portTICK_RATE_MS);    //间隔 1000 ms
    }
}

void app_main()
{
    nvs_flash_init();   //nvs flash 初始化
    system_init();      //系统初始化

    printf("Creat Hello World task \r\n");

    xTaskCreate(&helloworld_task, "&helloworld_task", 2048, NULL, 5, NULL);  //创建 hello world 任务
}

xTaskCreate是创建任务,任务是FreeRTOS中的基本概念,用RTOS构建的实时程序是由一系列的任务组成的。ESP32的xTaskCreate的函数文档说明如下:

BaseType_t xTaskCreate(
                    TaskFunction_t pvTaskCode,//任务的代码入口&helloworld_task
                    const char * const pcName,//任务名字:&helloworld_task
                    uint16_t usStackDepth,//任务的堆栈大小:2048
                    void *pvParameters,//指针
                    UBaseType_t uxPriority,//优先级:5
                    TaskHandle_t *pvCreatedTask//回传句柄
                 );

任务有四个状态:

  1. 运行
  2. 就绪:资源不够,等待较高优先级的任务结束分资源的状态
  3. 阻塞:任务中有调用其它任务,比如上述调用的vTaskDelay()。任务在等待队列、信号量、事件组、通知、信号量事件时都会处在阻塞态。通常,这些等待都会设置一个超时timeout时间,当等待超时是将任务从阻塞态推出,防止任务被无线挂起。
  4. 挂起

freeRTOS使用队列、信号量、互斥量、任务通知完成任务间数据共享和通信。


ESP32的启动过程:

  1. 在 ROM 中的第一阶段的 bootloader 从 flash 偏移地址 0x1000 处加载第二阶段的 bootloader 到 RAM 中。
  2. 第二阶段的 bootloader 从 flash 上面加载分区表和主应用程序镜像。主应用程序包含 RAM 段和通过 flash cache 映射的只读段
  3. 主应用程序镜像开始执行。此时,第二个 CPU 以及 RTOS 调度器开始启动。

打印分区表。

$  make partition_table
Partition table binary generated. Contents:
*******************************************************************************
# Espressif ESP32 Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,1M,
*******************************************************************************

results matching ""

    No results matching ""