06 vcpkg用法
vcpkg用法 众所周知CMAKE只有项目构建的功能,而没有包管理的功能,因此之前要用第三方库的话,基本每次都得去github上下载,然后再写CMakeLists.txt,这属实有点麻烦…因此有必要学一下包管理工具,使得在开发时,可以更简单的在项目中加入第三方的依赖 注意:vcpkg下载的都是源码然后自行编译,不是直接下载.lib,.dll文件的!!!所以他能管理的都是那些git上的开源代码库,比如:opencv、qt、ffmpeg…而像TensorRT这样的库是不能用vcpkg来安装的,还是得自行下载安装 1.使用基本流程使用vcpkg的流程很固定,基本都一样: 1.下载并编译需要的库 1vcpkg install xxx # 会安装在vcpkg/installed目录下 2.在项目的CMakeLists.txt中加入vcpkg的TOOL Chain 1234cmake_minimum_required(VERSION 3.15)# 必须在创建工程前指定CMAKE_TOOLCHAIN_FILEset(CMAKE_TOOLCHAIN_FILE...
Keil的Debug技巧
Debug 技巧1.Debug时,黄色箭头代表程序运行到哪里了,蓝色箭头是鼠标移动的位置 2.可以通过看Systick的值来计算语句运行的时间 3.从Watch Window可以设置在某变量发生变化时设置断点 4.单步调试【单步调试】也就是每点⼀次按钮,程序运⾏⼀步。遇到函数会进⼊函数。点击图标按钮,或者按快捷键F11。(这⾥取消上⾯的断点) 5.逐步调试【逐步调试】即逐⾏调试,也就是每点⼀次按钮,程序运⾏⼀⾏。遇到函数不会进⼊函数。点击图标按钮,或者按快捷键F10。 6.跳出调试【跳出调试】即挑出函数调试,也就是每点⼀次按钮,程序跳出⼀个函数,直到跳出最外⾯的函数(main函数)。点击图标按钮,或者按快捷键Ctrl + F11。 7.运⾏到光标处【运⾏到光标处】即将光标放在某⼀处,点击该按钮(或Ctrl +...
SPI
SPI学习1.SPI的物理结构 MOSI:主设备输出,从设备输入 MISO:主设备输入,从设备输出 SCK:时钟信号线 CS:设备片选,低电平表示被选择 一个SPI接口可以同时连接多组从设备,只需要增加CS线即可 用CUBEMX设置SPI默认只有3个引脚(没有CS),如果下面开启了NSS,系统会自动给你指定一个CS引脚,否则就要自己指定CS引脚 在通信开始/结束时,手动控制CS引脚的电平 2.SPI工作原理主机和从机内部都有一个移位寄存器,主机发送数据时,同时也会受到一组数据,不过不需要对该数据处理。主机接收数据时,要给从机发送一组没有意义的数据,同时接收数据。 3.寄存器相关的寄存器有2组 CPOL(时钟极性寄存器):控制高电平还是低电平时空闲状态 CPHA(相位控制寄存器):控制是奇数还是偶数跳变是读取数据 这个怎么选一般要看芯片手册 4.SPI的其他参数
样式
样式 样式是一个 lv_style_t 变量,它可以保存边框宽度、文本颜色等对象的属性尽管可以用简单的方法Lv_set_xxx()直接修改对象的属性,但是用过样式来该的话可以比较方便的修改更多对象的样式。 可以将样式分配给对象以更改其外观。在赋值过程中,可以指定目标部分(和目标状态 LVGL对象包括如下状态且可以通过|来组合 数字代表了这种状态的优先级,最后选择优先级最高的来显示 1.初始化样式和设置/获取属性样式存储在 lv_style_t 变量中。样式变量应该是 static 、全局或动态分配的。 换句话说,它们不能是函数中的局部变量,当函数结束时它们会被销毁。 在使用样式之前,它应该用 lv_style_init(&my_style) 进行初始化。 初始化后,可以设置或添加样式属性。lv_style_set_<property_name>(&style, <value>); 1234static lv_style_t...
位置
对象的大小和位置1.对象的显示模型一个对象的所有像素包括以下4部分: 边界(bounding)框:元素的宽度/高度围起来的区域。 边框(border)宽度:边框的宽度。 填充(padding):对象两侧与其子对象之间的空间。 内容(content):如果边界框按边框宽度和填充的大小缩小,则显示其大小的内容区域。 2.改变对象位置的方式(1)直接方式 123lv_obj_set_x(obj, 10);lv_obj_set_y(obj, 20);lv_obj_set_pos(obj, 10, 20); //Or in one function (2)百分比 lv_obj_set_x(btn, lv_pct(10)); //x = 10 % of parant content area width (3)设置对齐 123456//与父对象对齐void lv_obj_align(struct _lv_obj_t * obj, lv_align_t align, lv_coord_t x_ofs,...
(三)定时器
(三)定时器一、MSP430单片机的定时器概述MSP430共有4个16位定时器,主要包括定时器A的0、1、2以及定时器B,每个定时器输出通道个数不同。 时钟源包括ACLK、SMCLK和TACLK 二、定时器的工作模式定时器主要包括4个工作模式: ① 停止模式。 停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A定时器工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_A仍然工作于增/减计数模式下,从暂停前的状态开始继续沿着下降方向开始计数。若不想这样,则可通过TAxCTL中的TACLR控制位来清除定时器的计数及方向记忆特性。 ②...
(二)外部中断
(二)外部中断1.中断概述MSP430单片机的中断优先级是固定的,由硬件确定,用户不能更改。当多个中断同时发生中断请求时,CPU按照中断优先级的高低顺序依次响应。MSP430单片机包含3类中断源:系统复位中断源、不可屏蔽中断源和可屏蔽中断源。 可屏蔽中断源是具有中断功能的片上外设所产生的。由状态寄存器SR的GIE位控制,当GIE=0时,所有中断使能。当GIE=1时,所有中断使能 以下是MSP430所有中断 在使用外部中断时,由于其是可屏蔽中断,所以必须要置位GIE 可以通过 123_EINT();//开启_DINT();//关闭 或者 12__bis_SR_register(GIE);//开启__bic_SR_register(GIE);//关闭 开启或关闭。 2.中断写法1234567891011121314151617#pragma vector = PORT2_VECTOR // P2口中断源__interrupt void Port_2 (void) // 声明一个中断服务程序,名为Port_2(){ ...
14 阻塞与非阻塞IO
Linux阻塞与非阻塞IO阻塞与非阻塞的区别 阻塞:在对fd执行IO操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足 非阻塞:在不能对fd进行IO操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止 应用层的代码上两者的区别: 1234567// 阻塞IOchar buf;fd = open("/dev/ttyS1", O_RDWR);...res = read(fd,&buf,1);// 只有读到数据了才会返回 if(res==1) printf("%c\n", buf); 12345678// 非阻塞IOchar buf;fd = open("/dev/ttyS1", O_RDWR|O_NONBLOCK);...while(read(fd,&buf,1)!=1){continue;} /* 串口上无输入也返回,因此要循环尝试读取串口...
15 input子系统
...
01 应用开发概述
...







