2020-07-06

USB的24脚和12脚TYPEC引脚定义 USB 是一种接口,用于将设备连接到计算机上。通过该连接,计算机可以向设备发送数据或检索来自设备的数据。USB 为开发者提供了一个标准接口,适用于多种不同类型的应用。借助于系统的设计过程,USB 设备易于连接和使用。本应用笔记会使该过程变得更加简单。以下是本应用笔记中会使用的概念:USB 历史USB 架构USB 物理接口USB 速度USB 电源USB 端点USB 通信协议USB 描述符USB 类设备USB 枚举与配置过程。 阅读详情

第一级:代码调整
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别试图执行9种单独的优化功能:

-fdefer-pop
-fmerge-constans
-fthread-jumps
-floop-optimize
-fif-conversion: if-then
-fif-conversion2
-fdelayed-branch
-fguess-branch-probability
-fcprop-registers
第二级:新的视角
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法; 编译器还试图采用以下几种优化。
10. -fforce-mem
11. -foptimize-sibling-calls
12. -fstrength-reduce
13. -fgcse
14. -fcse-follow-jumps
15. -frerun-cse-after-loop
16. -fdelete-null-pointer-checks
17. -fextensive-optimizations
18. -fregmove
19. -fschedule-insns
20. -fsched-interblock
21. -fcaller-saves
22. -fpeephole2
23. -freorder-blocks
24. -fstrict-aliasing
25. -funit-at-a-time
26. -falign-functions
27. -fcrossjumping
第三级:表驱动状态机
将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);这一级一般可以产生无与伦比的快速程序, 要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象等,剩下的只应该是那个表驱动状态机; 我想把这种境界描述为:空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运转着;除此之外have nothing; 既:把解决一个问题的算法看作一个机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则,然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是速度也可能是空间等等) 。编译器还试图采用以下这种优化方式。
28. -finline-functions
29. -fweb
30. -fgcse-after-relo
静态库

(1)制作步骤
1)编译.o文件

2)将.o文件打包:ar rcs libname.a file1.o file2.o file3.o …

3)将头文件与库一起发布
1
2
3
4
5
文件内容及路径分布如下:

[root@centos1 calc]# tree
.
├── include
│ └── head.h
├── lib
├── main.c
└── src
├── add.c
└── sub.c

1 #include<stdio.h>
2
3 int add(int a, int b);
4 int sub(int a, int b);
head.h
1 #include “head.h”
2
3 int sub(int a, int b)
4 {
5 return a - b;
6 }
sub.c
编译为.o文件
进入到 src 目录下执行:

[root@centos1 src]# gcc -c *.c -I …/include/
[root@centos1 src]# ll
总用量 16
-rw-r–r–. 1 root root 63 4月 20 14:53 add.c
-rw-r–r–. 1 root root 1240 4月 20 15:10 add.o
-rw-r–r–. 1 root root 63 4月 20 14:24 sub.c
-rw-r–r–. 1 root root 1240 4月 20 15:10 sub.o
将.o文件打包,制作成libCalc.a静态库
[root@centos1 src]# ar rcs libCalc.a *.o
[root@centos1 src]# ll
总用量 20
-rw-r–r–. 1 root root 63 4月 20 14:53 add.c
-rw-r–r–. 1 root root 1240 4月 20 15:10 add.o
-rw-r–r–. 1 root root 2688 4月 20 15:12 libCalc.a
-rw-r–r–. 1 root root 63 4月 20 14:24 sub.c
-rw-r–r–. 1 root root 1240 4月 20 15:10 sub.o
1.动态库 制作步骤

(1)编译与位置无关的代码(下图共享库),生成.o目标文件,关键参数 -fPIC

进程虚拟地址空间

(2)将.o文件打包,关键参数 -shared

(3)将库与头文件一起发布

生成.o目标文件
文件路径和内容同上,进入到src目录,生成.o目标文件:

[root@centos1 src]# gcc -fPIC -c *.c -I …/include/
[root@centos1 src]# ll
总用量 16
-rw-r–r–. 1 root root 63 4月 20 14:53 add.c
-rw-r–r–. 1 root root 1240 4月 20 15:20 add.o
-rw-r–r–. 1 root root 63 4月 20 14:24 sub.c
-rw-r–r–. 1 root root 1240 4月 20 15:20 sub.o
将.o文件打包生成动态库
[root@centos1 src]# gcc -shared -o libCalc.so *.o
[root@centos1 src]# ll
总用量 24
-rw-r–r–. 1 root root 63 4月 20 14:53 add.c
-rw-r–r–. 1 root root 1240 4月 20 15:20 add.o
-rwxr-xr-x. 1 root root 5817 4月 20 15:21 libCalc.so
-rw-r–r–. 1 root root 63 4月 20 14:24 sub.c
-rw-r–r–. 1 root root 1240 4月 20 15:20 sub.o

CMake使用
一、 基本使用

安装:下载二进制包后可直接解压使用

从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败

使用:cmake dir_path,生成工程文件或makefile文件

二、 概念

out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;

三、 基本结构

1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;

2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录

3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)

四、 语法

1
变量:使用set命令显式定义及赋值,在非if语句中,使用KaTeX parse error: Expected 'EOF', got '#' at position 62: …nd (args ...) #̲命令不分大小写,参数使用空格分…{var}) <=> Add_executable(a b c) #变量使用${xxx}引用
1
条件语句:
if(var) #var 非empty 0 N No OFF FALSE… #非运算使用NOT

…
1
else()/elseif() … endif(var)

循环语句
1
Set(VAR a b c)

Foreach(f ${VAR}) …Endforeach(f)

循环语句
1
WHILE() … ENDWHILE()

五、 内部变量

CMAKE_C_COMPILER:指定C编译器

CMAKE_CXX_COMPILER:

CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项

EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径

LIBRARY_OUTPUT_PATH:库文件路径

CMAKE_BUILD_TYPE::build 类型(Debug, Release, …),CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBS:Switch between shared and static libraries
内置变量的使用:

在CMakeLists.txt中指定,使用set
cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF
六、 命令

project (HELLO) #指定项目名称,生成的VC项目的名称;

使用${HELLO_SOURCE_DIR}表示项目根目录
include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数

include_directories (${HELLO_SOURCE_DIR}/Hello) #增加Hello为include目录
link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数

link_directories (${HELLO_BINARY_DIR}/Hello) #增加Hello为link目录
1
add_subdirectory:包含子目录

add_subdirectory (Hello)
1
add_executable:编译可执行程序,指定编译,好像也可以添加.o文件

add_executable (helloDemo demo.cxx demo_b.cxx) #将cxx编译成可执行文件——
1
add_definitions:添加编译参数

add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;
add_definitions( “-Wall -ansi –pedantic –g”)
target_link_libraries:添加链接库,相同于指定-l参数

target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demo
add_library:

add_library(Hello hello.cxx) #将hello.cxx编译成静态库如libHello.a
add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( … ): lots of properties… OUTPUT_NAME, VERSION, …

link_libraries( lib1 lib2 …): All targets link with the same set of libs

Android实现自动输入文本效果 (附完整源码) Android实现自动输入文本效果 (附完整源码) 阅读详情

相关推荐

【星火】海思HI3516C开发板实战:基于LVGL与MPP库的行车记录仪/电子显微镜方案

本文详细介绍了基于海思HI3516CV500开发板,结合LVGL图形库与海思MPP媒体处理平台,实现行车记录仪与电子显微镜方案的完整实战过程。内容涵盖从系统环境搭建、驱动配置到应用开发的全流程,重点解析了MPP视频流处理管道与LVGUI界面协同工作的核心机制,为嵌入式音视频开发提供了可复用的参考方案。

weixin_42126677的博客 161

Vue 时间转换方法,2020-04-18T16:51:56+08:00 时间转换方法

如下图: 后的接口返回的时间是个时间对象最后导致成这个格式,坑爹; 通过自定义下面的方法和调用即可转换格式 dateFormat(fmt, date) { let ret=""; date=new Date(date); const opt = { 'Y+': date.getFullYear().toString(), // 年...

Syspan 1万+

【渗透工具】内网多级代理工具Venom详细使用教程

Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。

TT小子的博客 3757

shell-转换字符串

请把下面的字符串: zhangsan y97JbzPru lisi 5JhvCls6q xiaowang Nnr8qt2Ma laoma iqMtvC02y zhaosi 9fxrb4sJD 改为如下: zhangsan:y97JbzPru lisi:5JhvCls6q xiaowang:Nnr8qt2Ma laoma:iqMtvC02y zhaosi:9fxrb4...

weixin_34268169的博客 2354

SAP ABAP干货:用REUSE_ALV_GRID_DISPLAY_LVC实现ALV多屏幕独立布局(含handle参数详解)

本文详细解析了SAP ABAP中如何使用REUSE_ALV_GRID_DISPLAY_LVC函数实现ALV多屏幕独立布局,重点介绍了handle参数的技术原理和实际应用。通过变式标识符和LTDX表存储机制,开发者可以确保不同ALV报表屏幕的布局设置互不干扰,提升复杂报表场景下的用户体验。

weixin_29268267的博客 311

PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现

PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现 BRDF简介 再介绍BRDF之前我们要引入渲染方程这个东西: 其中L表示辐射率,其公式为: 它表示了一个拥有辐射强度Φ的光源在单位面积A,单位立体角ω上的辐射出的总能量。 辐射率是辐射度量学上表示一个区域平面上光线总量的物理量,它受到入射光线与平面法线间的夹角θ的余弦值cosθ的影响:当直接...

小龙虾的博客 1万+

shell脚本 [ ( 等报不合法符号错误的原因——dash&bash

学习shell脚本时候遇到了诸如 [: Illegal number random生成随机数的一些奇怪问题 经过了漫长的排错,发现和脚本没有一点关系,而是sh的问题 脚本我是用sh命令执行的,看一下sh被重定向到dash 然后网上搜索了一下dash和bash的区别,包括 bash: 支持[[ ]], 可实现正则匹配等强大功能 dash: 不支持[[ ]], 替代方法,采用外部命令 dash也不...

cherish的技术博 5636

Qt项目开发实例 (含源码)

qt教程、qt项目、qt下载、qt项目实战、qt多线程。本文通过分析demo源码,QT实战的方式进行学习,学习路线是以实战为目录,全面的使用自己的学习知识,文章中编写一系列的学习游戏demo,与大家一起分享。

啊渊的专栏 14万+

2020-03-05T06:26:07.000+0000

JAVA:JSON传输过程中时间问题:2020-03-05T06:26:07.000+0000转换成正常格式(2020-03-05 14:28:39) SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssZZZ"); Date date = new Date(); try { date = ...

baidu_38556502的博客 6151

使用Visual Studio 2022创建CUDA编程项目

本文介绍了在Visual Studio 2022中配置CUDA开发环境的完整流程。首先需要安装VS2022并勾选C++开发组件,然后安装CUDA Toolkit和兼容的NVIDIA驱动。创建项目时选择CUDA模板,VS会自动生成数组相加的示例代码。项目配置包含CUDA头文件依赖和链接器设置(cudart_static.lib)。文章详细说明了从环境搭建到代码编写、调试的完整步骤,帮助开发者快速上手CUDA编程。

新兴IT民工的专栏 1万+

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 589

2020-06-07

创建一个Rectangle类并测试 2020.06.06 创建一个Rectangle类,连接Shape接口,引用implementMethods方法,定义私有属性a,b;引用setter and getter,全选变量,改写返回值。在练习的过程中,由于不知道在哪里导入输入命令,无法实现手动输入长度与宽度的值,以为需要重新写Shape接口,以及忘记了要通过对象名.set()才能赋值,然后老师在讲circle类例题的时候也未理解清晰,但又不知道该怎么问,老师讲的时候也只跟着敲了,没有认真仔细理解代码含义,造成

qq_46301897的博客 216

RK3568 低功耗设计全解析:DVFS 策略与 PMIC 电源管理

本文深入解析RK3568处理器的低功耗优化方案。从硬件架构分析入手,阐述四核Cortex-A55的功耗特性及分层电源域设计。重点介绍DVFS动态调压调频技术,包括Linux内核配置方法及场景化策略设计。详细讲解RK809 PMIC的电源管理优化,提供外设电源域控制与休眠唤醒配置的实战案例。通过智能终端应用实例,展示待机功耗从280mA降至65mA的优化效果,并推荐功率测试工具。文章强调需要平衡性能与功耗,结合场景定制策略,并指出AI负载预测等未来优化方向,为RK3568开发者提供系统性的低功耗解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2074

2020-06-07—记录

记录下今天在做项目的时候,遇到的一些常用的插件以及技术问题,闲话就不多说了,赶紧上车: (一)、Material Theme UI—Idea主题插件 (1)、在Idea里通过在线安装插件 说明:这个插件提供了很多主题,根据自己的喜好进行选择即可。 (二)、layui框架,点击编辑按钮,进行修改,日期数据无法回显?列表展示,展示时间是时间戳,无法正常显示?闪退? (1)、解决数据无法回显以及闪退问题如下: 通过查看官方文档 laydate.render({ ele...

何必怀念 623

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 实训日报表
下一篇: 日报表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值