ESP32-IDF Cmake编写要点
1.文件通配 & 增量构建在 ESP-IDF 组件中添加源文件的首选方法是在 COMPONENT_SRCS 中手动列出它们: 12idf_component_register(SRCS library/a.c library/b.c platform/platform.c ...) 这是在 CMake 中手动列出源文件的 最佳实践。然而,当有许多源文件都需要添加到构建中时,这种方法就会很不方便。ESP-IDF 构建系统因此提供了另一种替代方法,即使用 SRC_DIRS 来指定源文件: 12idf_component_register(SRC_DIRS library platform ...) 后台会使用通配符在指定的目录中查找源文件。但是请注意,在使用这种方法的时候,如果组件中添加了一个新的源文件,CMake 并不知道重新运行配置,最终该文件也没有被加入构建中。 如果是自己添加的源文件,这种折衷还是可以接受的,因为用户可以触发一次干净的构建,或者运行 idf.py reconfi...
ESP32-FreeRTOS学习笔记(十七)--任务通知3
再额外介绍剩下的几个关于任务通知的函数 1.API介绍 发送通知 12345678910111213141516171819202122232425BaseType_t xTaskNotifyAndQuery( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotifyValue ); BaseType_t xTaskNotifyAndQueryIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulV...
ESP32-FreeRTOS学习笔记(十六)--任务通知2
今天讲给大家演示如何使用直接任务通知来取代事件组的功能。 任务通知使用的是32bits,而之前讲的事件组是24bits,所以,只要不是涉及多个任务, 那么这个直接任务通知可以完全取代事件组。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115static TaskHandle_t xledTask = NULL;#define RESET_0 0b1#define LEDBIT_1 0b10#define LEDBIT_2 0b100#define LEDBIT_3 0b1000#define LEDBIT_4 0b10000#define LEDBIT_5 0...
ESP32-FreeRTOS学习笔记(十五)--任务通知1
Direct Task Notification是FreeRTOS 10版本以后的最重要的一个功能。他可以实现大部分二进制信号量,计数信号量,事件组,邮箱等等的功能。而且速度快45%,并且占用更少的内存,所以我们应该尽量使用任务通知这个功能。本集会深层次的讲解什么是notification,以及对他的读,写 和等待。一个任务将会有多个通知,一个通知包含**值(value)以及状态(status)**这两个内容,值占4个字节,状态占一个字节。 1.API介绍1.发送通知1234567891011BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );BaseType_t xTaskNotifyGiveIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify );void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, ...
ESP32-FreeRTOS学习笔记(十四)--信息缓存
Message Buffer是基于Stream Buffer的。只是在每一次发送数据的时候多了四个字节的空间用于存放消息的大小。更具这个消息大小,读取放就可以一次读取出全部消息的内容。在视频中,也会对全部三个FreeRTOS的数据类型进行对比,分别是Queue,Stream Buffer 和 Message Buffer。 1.API介绍1.创建缓存123456789101112131415161718MessageBufferHandle_t xMessageBufferCreate( size_t xBufferSizeBytes );MessageBufferHandle_t xMessageBufferCreateWithCallback( size_t xBufferSizeBytes, StreamBufferCallbackFunction_t pxSendCompletedCallback, StreamBuffe...
ESP32-FreeRTOS学习笔记(十三)--流媒体缓存
FreeRTOS 10以后引入了一个新的数据类型就是 Stream Buffer。它和Queue最大的不同就是,Stream Buffer读写的大小没有限制,而Queue是预设值好固定的值。Stream Buffer 流媒体缓存顾名思义它的受众对象就是 流媒体 比如MP3,视频,在线电台等。 1.API介绍1.创建缓存12345678910111213141516171819202122StreamBufferHandle_t xStreamBufferCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes );StreamBufferHandle_t xStreamBufferCreateWithCallback( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, ...
ESP32-FreeRTOS学习笔记(十二)--事件标志组
1.概念事件组就是所有任务共享的3个字节(24个位)。事件 “标志 “是一个布尔值(1或0),用于指示一个事件是否发生。事件 “组 “是一组事件标志。事件标志只能为1或0,允许事件标志的状态存储在单个位中,事件组中所有事件标志的状态存储在单个变量中;事件组中每个事件标志的状态由类型为EventBits_t的变量中的单个位表示。因此,事件标志也被称为事件“位”。如果EventBits_t变量中的一位被设为1,则该位表示的事件已经发生。如果在EventBits_t变量中一个位被设置为0。那么由该位表示的事件没有发生。 2.使用到的API1.创建与删除123EventGroupHandle_t xEventGroupCreate( void ); //创建事件组,返回的是创建的事件组的句柄void vEventGroupDelete( EventGroupHandle_t xEventGroup ); //删除事件组,传入要删除事件组的句柄 2.等待事件组123456EventBits_t xEventGroupWaitBits( cons...
ESP32-FreeRTOS学习笔记(十一)--计数信号量
1.使用到的API12345SemaphoreHandle_t xHandler; //创建HandlerxHandler = xSemaphoreCreateCounting(uxMaxCount, uxInitialCount); //创建一个计数信号量 失败返回NULL,成功返回handlerxSemaphoreGive(xHandler); //二进制信号量+1xSemaphoreTake(xHanlder, timeout); //二进制信号量-1 返回pdPASS, 或者pdFAILxSemaphoreGiveFromISR(xHandler, portBASE_TYPE *pxHigherPriorityTaskWoken); //中断里面用的give函数,第二个参数的官方解释如下) pxHigherPriorityTaskWoken:对某个信号量而言,可能有不止一个任务处于阻塞态在等待其有效。调用 xSemaphoreGiveFromISR()会让信号量变为有效,所以会让其中一个等待任务切出阻塞态。如果调用 xSemaphoreGiveFromISR()使得一个...
ESP32-FreeRTOS学习笔记(十)--二进制信号量
1.使用到的API12345SemaphoreHandle_t xHandler; //创建HandlerxHandler = xSemaphoreCreateBinary(); //创建一个二进制信号量 返回NULL,或者handlerxSemaphoreGive(xHandler); //二进制信号量+1xSemaphoreTake(xHanlder, timeout); //二进制信号量-1 返回pdPASS, 或者pdFAILxSemaphoreGiveFromISR(xHandler, portBASE_TYPE *pxHigherPriorityTaskWoken); //中断里面用的give函数,第二个参数的官方解释如下) pxHigherPriorityTaskWoken:对某个信号量而言,可能有不止一个任务处于阻塞态在等待其有效。调用 xSemaphoreGiveFromISR()会让信号量变为有效,所以会让其中一个等待任务切出阻塞态。如果调用 xSemaphoreGiveFromISR()使得一个任务解除阻塞,并且这个任务的优先级高于当前任务(也就是被中断的...
通过镜像恢复方式为nanopi配置系统
1.请烧录如下固件nanopi-neo-core_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip 烧录完的SD卡将会有以下三个分区(SD必须大于16G) boot rootfs FriendlyARM Windows下可能需要相关软件才能读取到所有分区。 2.通过串口控制nanopi请按照图示连接nanopi,串口请连接到UART0,波特率必须为115200 插入SD卡,并通过串口连接到电脑进入终端(如果串口显示为空可以尝试回车几次): 1234567普通用户: 用户名: pi 密码: piRoot用户: 用户名: root 密码: fa 在终端以超级管理员身份执行指令 eflasher 后有如下界面: 1234567891011121314151617181920212223242526---------------------------------------------------------------------- EFlasher v1.2 b190111 running on NanoP...