OpenCV-学习
OpenCV-学习
OpenCV-VS2019环境配置
OpenCV-VS2019环境配置环境变量配置
右键此电脑选中属性
选择高级系统设置
选择环境变量
双击【Path】
点击新建,输入opencv安装路径
依次确定返回
VS2019配置
创建新项目
选择空项目
填好位置和项目名称
源文件添加 mian.cpp
依次选择【视图】–>【其他窗口】–>【属性管理器】
Debug x86 改为 x64
找到 OpenCV 安装的后的文件夹 D:\OpenCV\opencv\build\x64\vc15\bin,将下面3个文件复制到 C:\Windows\System32 文件夹里。
回到 VS【属性管理器】,右键点击 Debug | x64,选择【添加新项目属性表】,输入任意名称
双击新建的属性表,依次选择【通用属性】–>【VC++目录】–>【包含目录】,点击【包含目录】右侧的向下箭头,选择【编辑】
点击如下图红框所示位置
点击右侧的…按钮,选择 D:\OpenCV\opencv\build\include 和 D:\OpenCV\opencv\build\include\opencv2 这两个路径,点击确定
和上 ...
蓝牙
蓝牙概述结构蓝⽛是⼀种短距通信系统,其关键特性包括鲁棒性、低功耗、低成本等。蓝⽛系统分为两种不同的技术:经典蓝⽛ (Classic Bluetooth) 和蓝⽛低功耗 (Bluetooth Low Energy)。ESP32 ⽀持双模蓝⽛,即同时⽀持经典蓝⽛和蓝⽛低功耗。从整体结构上,蓝⽛可分为控制器 (Controller) 和主机 (Host) 两⼤部分:
控制器包括 PHY、Baseband、Link Controller、Link Manager、Device Manager、HCI 等模块,⽤于硬件接⼝管理、链路管理等等;
主机包括了 L2CAP、SMP、SDP、ATT、GATT、GAP 以及各种规范,构建了向应⽤层提供接⼝的基础,⽅便应⽤层对蓝⽛系统的访问。
主机可以与控制器运⾏在同⼀个宿主上,也可以分布在不同的宿主上。ESP32 蓝牙主机与控制器关系结构图如下所示。
运行环境ESP-IDF 的默认运⾏环境为双核 FreeRTOS,ESP32 的蓝⽛可按照功能分为多个任务 (task) 运⾏,不同任务的优先级也有不同,其中优先级最⾼的为运⾏控制器的任务。控制器任务 ...
ESP32中断Bug
ESP32中断Bug特性浮点运算在中断内进行浮点运算会自动复位。在官方文档可以查到。官方文档描述如下:ESP-IDF FreeRTOS implements Lazy Context Switching for FPUs. In other words, the state of a core’s FPU registers are not immediately saved when a context switch occurs. Therefore, tasks that utilize float must be pinned to a particular core upon creation. If not, ESP-IDF FreeRTOS will automatically pin the task in question to whichever core the task was running on upon the task’s first use of float. Likewise due to Lazy Context Switching, only i ...
ESPIDF-UART
ESPIDF-UART概述嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART) 即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换。ESP32 芯片中有 3 个 UART 控制器可供使用,并且兼容不同的 UART 设备。另外,UART 还可以用作红外数据交换 (IrDA) 或 RS-485 调制解调器。UART 是一种以字符为导向的通用数据链,可以实现设备间的通信。异步传输的意思是不需要在发送数据上添加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。一个典型的 UART 帧开始于一个起始位,紧接着是有效数据,然后是奇偶校验位(可有可无),最后是停止位。ESP32 上的 UART 控制器支持多种字符长度和停止位。另外,控制器还支持软硬件流控和 DMA,可以实现无缝高速的数据传输。开发者可以使用多个 UART 端口,同时又能保证很少的软件开销。
流控机制概念在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。如台式机与单片机之间的通讯 ...
ESPIDF-PWM
ESPIDF-PWM概述ESP32 有两个模块可以产生PWM。一个是 MCPWM ,另一个是 LED_PWM。
MCPWM电机控制脉宽调制器(MCPWM)外设用于电机和电源控制。它提供了六个 PWM 输出,可在几种拓扑结构中运行。常见的拓扑结构之一是用一对 PWM 输出来驱动 H 桥以控制电机旋转速度和旋转方向。MCPWM 的时序和控制资源分为两种主要类型的模块:PWM 定时器和 PWM 操作器。每个 PWM 定时器提供定时参考,可以自由运行,或同步到其他定时器或外部源。每个 PWM 操作器具有用于为一个 PWM 通道生成波形对的所有控制资源。MCPWM 外设还包含专用捕获模块,用于需要精确定时外部事件的系统。ESP32 有两个 MCPWM 外设,分别是 MCPWM0 和 MCPWM1。它们的控制寄存器分别位于从地址 0x3FF5E000 和 0x3FF6C000 开始的 4 KB 内存中。
LED_PWMLED_PWM 主要用于控制 LED 的亮度和颜色,也可以产生 PWM 信号用于其他用途。LED_PWM 有 16 路通道,即 8 路高速通道和 8 路低速通道。这 16 路 ...
ESPIDF-定时器
ESPIDF-定时器概述ESP32 内置 4 个 64-bit 通用定时器。每个定时器包含一个 16-bit 预分频器和一个 64-bit 可自动重新加载向上/向下计数器。ESP32 的定时器分为 2 组,每组 2 个。TIMGn_Tx 的 n 代表组别,x 代表定时器编号。
功能描述16-bit 预分频器每个定时器都以 APB 时钟(缩写 APB_CLK,频率通常为 80 MHz)作为基础时钟。16-bit 预分频器对 APB 时钟进行分频,产生时基计数器时钟(TB_clk)。TB_clk 每过一个周期,时基计数器会向上数一或者向下数一。在使用寄存器 TIMGn_Tx_DIVIDER 配置分频器除数前,必须关闭定时器(清零 TIMGn_Tx_DIVIDER)。定时器使能时配置预分频器会导致不可预知的结果。预分频器可以对 APB 时钟进行 2 到 65536 的分频。具体来说,TIMGn_Tx_DIVIDER为 1 或 2 时,时钟分频器是 2;TIMGn_Tx_DIVIDER 为 0 时,时钟分频器是 65536。如 TIMGn_Tx_DIVIDER 为其他任意值,时钟会被相同数 ...
ESPIDF-GPIO
ESPIDF-GPIO管脚配置1esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)
Configure GPIO’s Mode, pull-up, PullDown, IntrTypepGPIOConfig 为配置管脚的结构体指针
找到 gpio_config_t 如下所示:
1234567typedef struct { uint64_t pin_bit_mask; /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */ gpio_mode_t mode; /*!< GPIO mode: set input/output mode */ gpio_pullup_t pull_up_en; /*!< GPIO pull-up */ ...
FPGA-verilog
FPGA-verilog数据类型常量
整数:整数可以用二进制 b 或 B,八进制 o 或 O,十进制 d 或 D,十六进制 h 或 H 表示。例如:8’b00001111 表示 8 位位宽的二进制整数,4’ha 表示 4 位位宽的十六进制整数。
x 和 z:x 代表不定值,z 代表高阻值。例如:5’b00x11,第三位不定值,3’b00z 表示最低位为高阻值。
下划线:在位数过长时可以用来分割位数,提高程序可读性,如 8’b0000_1111
参数 parameter:parameter 可以用标识符定义常量,运用时只使用标识符即可,提高可读性及维护性,如定义 parameter width = 8 ; 定义寄存器 reg [width-1:0] a; 即定义了 8 位宽度的寄存器。Parameter 可以用于模块间的参数传递,而 localparam 仅用于本模块内使用,不能用于参数传递。localparam 多用于状态机状态的定义。
变量
wire型wire 类型变量,也叫网络类型变量,用于结构实体之间的物理连接,如门与门之间,不能储存值,用连续赋值语句 a ...
ESP32上的FreeRTOS学习(3)
ESP32上的FreeRTOS学习(3)看门狗简介看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的简单一点,看门狗就是能让程序出问题时能重新启动系统。
ESP32看门狗ESP32有两个核心,每个核心都有对应的看门狗。当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级),这就是IDLE任务。而核心1上还运行着 loopback 任务,包括了 setup() 和 loop()。
core0:IDLE (优先级0)
core1:IDLE (优先级0)、loopback(优先级1)。
默认情况下只有 core0 的 IDLE任务开启了看门狗。
关闭看门狗12disableCore0WDT();disableCore1WDT();
添加看门狗12esp_err_t esp_task_wdt_add(TaskHandle_t handle);esp_task_wdt_add(NULL); // NULL代表本任务
喂狗 ...