- 博客(120)
- 资源 (4)
- 收藏
- 关注
原创 UE5 不同的编译模式下,module的组织形式
但是问题来了,这个方法只适合客户端模式,不适合编辑器模式!因为客户端可以用静态库,而编辑器模式需要的是动态库。告诉我atom的dll不存在。非常的简单,甚至屏蔽了所有依赖。然后在入口的module引用这个库。主要是将module的类型改成External,不参与编译,同时准备好这个库的静态库。后来,迫不得已,我只能将这个atom库改成静态库,不参与编译。这样,就可以编译了。这个地方引入了静态库,再编译,就可以再客户端模式和编辑器模式下一同生效。这个非常的坑,我想了很多办法都没有办法兼容两种模式。
2024-10-27 14:58:38 343
原创 如何将 cryptopp库移植到UE5内
这段时间在折腾UE5.4.4,学习的过程中,准备把cryptopp移植到游戏的工程内,但UE的编译环境和VS的编译环境完全不同,能在VS下顺利编译的cryptopp代码,移植之后,全在报错,错误千奇百怪,我尝试了修复这些错误,结果有一些错是根本修复不了的。1>D:\UEProject\Dawn\Source\cryptopp\code\config_misc.h(121): error C4668: 没有将“CRYPTOPP_GCC_VERSION”定义为预处理器宏,用“0”替换“#if/#elif”
2024-10-06 17:30:48 899
原创 1L4混合电路耳放(玩的第一个直热管)
有了设计的目标,接下来就是选管和设计线路,把淘宝上常见的直热管都翻了一遍,功率直热管非常的贵,而且灯丝电流普遍较大,做耳放实属浪费,因此直接放弃,经过多次筛选之后,一些早期的收音机管落入我的视线,这些管子都是电池供电,普遍电压较小,一般都是1.4V的电压,电流也偏小,大部分都是50毫安的电流,正好是那个时期电池能提供的能量。由于之前做过6V6耳放,虽然声音不错,但6V6是旁热管束射四极管,灯丝电流很大,加之整个电路都是用胆整流,因此,整个6V6系统的功耗非常的高,就几百毫瓦的耳放而言,感觉十分的浪费。
2024-08-22 13:12:08 575
原创 关于有源晶振的坑
板子回来后焊接完所有原件,接到电脑上的时候,发现核心板并没有工作,接到电脑之后没有任何反应。测量晶振的时候,3.3V供电没问题,输出1.5V也没有问题(万用表无法测量频率),当时非常的疑惑,这个核心板的设计并不复杂,甚至可以说非常简单,就是USB,LDO加MCU和NOR Flash,没有复杂的外围设计。在设计起振线路的时候,出于对稳定性的考虑,选择了有源晶振,有源晶振通常有4个脚,PIN2一般是接地,PIN3是输出,PIN4是接VCC,这三个脚没有任何异议,但是第一脚,非常麻烦。
2024-08-13 11:53:59 449
原创 http 协议中GET如何传递参数(Query String)?
之前看过数数提供的开发包,因为服务器用的是C++,而数数提供的C/C++开发包简陋的吓人,简单的看了一下代码,发现这些SDK在内存,临界区管理,多线程管理上没有做任何优化,如果直接使用,不仅增加了服务器的风险,还降低了服务器的性能,所以决定使用数数的POST接口来传递数据,但是需要自己手搓一个Http Connection来实现Http的访问。由于之前搞Web Scoket的时候,已经做了一些Http协议的基础代码,包括请求行,状态行,请求头,响应头等,所以基本上就是在这些基础上进一步的封装。
2024-07-19 11:06:54 696 1
原创 树莓派PICO使用INA226测量电流和总线电压(4)
这篇文章将写一些题外话,关于INA226的地址,如果不清楚开发板的I2C地址,可以通过总线扫描的办法来获取开发板设定的地址。我的开发板的地址就是0x40。
2024-07-14 13:59:18 317
原创 树莓派PICO使用INA226测量电流和总线电压(3)
上一篇文章我们讲了如何测试电流,但是INA226有一个非常典型的问题,那就是误差比较大,因为采样电阻非常小,我的开发板用的是100mΩ的采样电阻,在设定中我也用的是这个采样电阻值,但事实上,测试得到的偏差会超过10%,因为采样电阻本身有误差,焊接的工艺,焊锡膏的成分也有带来误差,甚至PCB上的布局和连线也会导致误差!所以,在实际场景中,想要达到比较精确的值,这个采样电阻,绝对不适合采用过小的电阻,比如10mΩ左右的电阻,因为积累误差甚至会超过电阻本身的的值。
2024-07-14 13:52:24 445
原创 树莓派PICO使用INA226测量电流和总线电压(2)
依照手册给出的公式,我们必须人为的指定一个最大的测量电流,然后用这个值除以 32768,即2的15次方,得到的值,就是电流的最低有效位。所以,在设计线路的时候,尽可能将采样电阻贴紧INA226,减少线路带来的误差。这个值非常的关键,因为它就是ADC能提供的分辨率,在手册里,提供了如何计算校准值的方法,其中最关键的就是计算LSB。上一篇文章里,我们讲了如何设置配置寄存器(0x01),在测量电流之前,还需要设置校准寄存器(0x05),校准寄存器非常关键,如果不设置这个寄存器,INA226是不会工作的。
2024-07-13 12:54:17 543
原创 树莓派PICO使用INA226测量电流和总线电压(1)
接下来就是选择参数,配置好平均次数,采样时间,模式等,得到一个uint16_t的值,这个值不能直接传递给INA226,因为I2C通讯传递的是大端数据,即高位在前(字节为单位),而PICO使用的是小端数据,所以,需要对数据进行一次位变换。在测量之前,必须先设置好两个寄存器,即0x01和0x05,第一个是配置寄存器,需要设置INA226的工作状态,第二个是校准寄存器,在校准寄存器设置之前,INA226是不会进行测量的。给测试板接上输入电源,简单的测量了一下各个位置的电压,没问题后,接上电脑开始写代码。
2024-07-13 11:41:05 1928
原创 RP2040 开发,用 Arduino 通过 ADC 获取电压测量数据
这两天测试了一下如何通过 RP2040 的内置 ADC 获取一个待测量的电压数据,RP2040 内置了4路ADC,分辨率是12bit,也就是说,可以获取4096阶的变化量,但第4个 ADC 已经用于测量芯片的内部温度,所以实际能用的仅有3个 ADC。但由于片内LDO的电压并不是标准的3.3V,所以,实际测量结果会有误差。这个测量电路非常简单,额外加一个电位器就行了,电位器的两端分别接3.3V,和A Gnd,版上能很容易找到3.3V的接口,接地要接AG,电位器中点接A0那个端口,就是GPIO 26。
2024-06-27 15:57:24 597
原创 Arduino 开发 RP2040 时如何使用Adafruit TinyUSB 进行虚拟串口通讯
最近在琢磨用RP2040开发灯丝控制电路,买回来一块RP2040的开发板,在琢磨需要的功能的时候,发现一些问题,问题的起源是想用电脑控制RP2040,设想是通过usb通讯,查了一下,找到Adafruit TinyUSB这个库可以做CDC(通讯),Arduino 的库内可以找到Adafruit TinyUSB这个库,也可以下载,但是无法使用,因为编译会出现大量的报错。这让我非常费解。因为我是基于Adafruit 提供的例子来编译的。按道理能提供例程,至少不应该有这种bug。后来我仔细看了Adafruit Ti
2024-06-24 13:54:13 1083
原创 来自电力电容的降维打击
我找了一圈电解电容,通常用于音频(分频器)的轴向电容耐压也就100V,其他的耐压高的试了几个,效果都很差,听起来怪怪的。于是我开始在海鲜市场准备找一些油电容来试试,各种品牌的都买了一些,直到有一天我找到一对Electronicon 的 E62 系列的油电容,容量合适,42uf,耐压1100V,属于电力电容,风机上拆下来的,价格很便宜,我对这个电容本身不是很在意,以为和之前的那些油电容差不多,结果一测试,让我大吃一惊:100HZ D值 0.0002,1KHZ D值0.0009,10KHZ D值0.0022!
2024-06-17 11:48:26 280
原创 Error code 64 - ERROR_NETNAME_DELETED
网络连接问题有多种原因,但通常是由于网络适配器不正确、交换机设置不正确、硬件故障或驱动程序问题导致的。一些连接症状是间歇性的,不能明确指出这些原因中的任何一个。
2024-05-21 17:01:00 302
原创 使用EO和nginx之后,服务器如何获取客户端真实IP地址
X-Forwarded-For 记录着从客户端发起请求后访问过的每一个 IP 地址,第一个是发起请求的客户端本身的地址,各 IP 地址间由“英文逗号+空格”(那么,只需要获取 X-Forwarded-For 这个头,并且用逗号来拆分字符串,第一个子串就是客户端的 IP 地址。,如果是直接访问的请求,可能是客户端真实的 IP 地址,但是中间若经过了层层的代理,就是最后一层代理的 IP 地址。从字面看 X-Real-IP 代表的是客户端请求真实的 IP 地址,这个参数。
2024-05-14 16:31:11 344
原创 ERROR_CONNECTION_ABORTED 1236
意思就是,从本质来讲,无论121,还是1236,都是由于连接中断或超时而返回的错误码。
2024-05-09 17:52:02 178
原创 2SC5200 NPN Bjt 的spice模型
BF = 220+ NF = 1+ IKF = 50+ BR = 28+ NR = 1+ VAR = 10+ IKR = 2+ NC = 1.5+ RB = 0.8+ FC = 0.5+ XTF = 10+ VTF = 2+ ITF = 1+ PTF = 0+ XTB = 3+ TRC1 = 0.ENDS。
2024-05-02 20:41:24 199
原创 架设WebSocket的最后一环,如何设置好nginx反向代理
WebScoket都已经完工快一个月,经过一段时间的测试,公司还是准备把服务器换到鹅厂,用EO来解决CDN内容分发和DDOS防护问题,由于EO并不支持URL 路径转发,只支持转发到一个站点的80或则443端口,如果想做路径分发,就必须用负载均衡,这个服务并不便宜,迫不得已,我只能在服务器上用Nginx来做反向代理。我仔细观察了发生故障的时候的网络请求,一个获取版本号的URL得到了500错误,这让我很惊讶,但我很快注意到网页下面有nginx的版本号,证明这个是nginx返回的错误。
2024-04-30 13:07:50 807 2
原创 直热管灯丝的噪音
地线噪音是一方面,另一个方面就是元器件本身带来的噪音,特别是稳压管带来的雪崩噪音!之前将灯丝电路集成到板上之后,由于OPA1612是双运放,灯丝伺服电路只需要单运放就可以了,多余的运放我不忍浪费,同时出于音质效果考虑,将另外一个运放用作电子管的固偏,以取消掉阴极电阻,但是最终的效果却发现电路产生了一种固有噪音,像呼气声,沙沙声,开始不解,将几乎所有元件都换了一次,最终发现,如果给运放-输入产生偏压的电阻上增加一个电容,就可以解决这个噪音,于是分析电路发现,这个电阻的噪音来源是AZ431产生的基准电压!
2024-04-19 16:08:29 1111
原创 WebSocket 对于手游的意义
因为WebScoket是HTTP协议的升级,因此,现在不少CDN服务提供商支持WebScoket,那么对于网络上常见的DDOS攻击,CC攻击,不少CDN提供商是带了DDOS,CC攻击保护的,意思就是,如果采用WebScoket+CDN的方案,面对这类网络攻击,你不需要额外花钱去买高防。但好处显而易见,通过CDN做隔离,服务器的真实IP不用暴露,所有的通讯都走CDN,一般的DDOS或则CC攻击在CDN这一层就被拦下,包括一些入侵服务器的行为,在无法得到服务器真实IP的情况下,攻击就无法实施。
2024-04-03 17:45:57 691
原创 .net 实现的 Webscoket 对象的一些细节和疑问
这两天服务器和客户端进行了webscoket的联调,在和C#的webscoket实现联调的过程中,发现一些有趣的事情。在我自己C++的实现中,webscoket对上层应用而言是完全透明的,webscoket 只是一个传输协议,用户对此不需要有任何关注,一切都自动进行,包括连接,握手升级,帧切割,帧拼合,控制帧管理,心跳这些,对外完全透明。
2024-04-03 11:19:36 1311
原创 webscoket 中的 mask 细节
我们看到,这个写的很清楚,掩码是给 payload 进行加密用的,这个位置会产生一个误解,就是,如果我没有 payload 的时候,是不是可以不需要掩码?比如一个 ping 帧,不带任何数据是否不需要mask?因此,你可以看到客户端发送到服务器的ping,实际上是带了掩码的,哪怕这个ping没有任何payload 数据。这段明确说了,客户端发送到服务器的所有帧都。有掩码,而服务器发送到客户端的所有帧都。如果违背了这个规则,就。以1002错误关闭连接。
2024-04-02 16:57:35 647
原创 聊聊websocket opcode中的text / binary模式
怎么解读帧都是应用层的事情,用什么格式来理解帧的内容,不就是subprotocol干的事情吗?这儿应该有更方便,或则说更直接的方式来处理,理清楚思路之后,我决定将opcode交给应用层来处理,应用层必须注册 subprotocol,提供具体的帧解析的接口,握手的时候,如果没有指定subprotocol,那就采用一个通用的dummy来处理帧。但这个区分并没有规定文本类型有类似于http协议中空行表示结束的说法,而且长度也是由帧头记录,也就是说,单纯从协议格式上来讲,这个区分,没有任何实际的含义。
2024-03-29 11:41:06 663
原创 websocket 内的操作码fin和opcode
在 webscoket 中,控制帧有一个限定:控制帧不允许分段(5.4. Fragmentation),意思就是,控制帧只允许作为一个完整的帧一次性发送。所以我们在处理webscoket帧的时候,如果Fin位为0,则不处理,将帧放入一个缓存,发现 Fin 位为1 的时候就可以处理帧了,根据帧的opcode来判断,如果是控制帧就直接处理,如果连续帧,就将之前缓存的帧拼接成一个完整的payload即可。其中,0,1,2是正常传输数据用的代码,8,9,A是标准的控制帧。rsv1 - 3 不用考虑,被保留的位。
2024-03-25 18:46:29 1290
原创 http 协议的有效字符
qdtext:除了引号 ” 之外的TEXT (即任何 8 位字节,除开控制字符,但包括CR LF HT) quoted-pair:(反斜杠后跟 [0, 127] 范围内的任何值)。但是,实际上,几乎所有的web服务器都不会接受除了CR LF HT之外的控制字符,以及大于等于127的字符(即几乎所有不可读的字符都不在范围之内)。如果研究完协议的描述,可以看到,所有的8字节ASCII码事实上都在标准的允许之内!token:除开控制字符和分隔符的 us字符 [0, 127];
2024-03-20 16:04:43 483
原创 websocket 中 request-line 中的URI编码问题
websocket, nginx,client sent invalid request while reading client request line,
2024-03-20 11:14:09 438
原创 websocket 升级协议时的协议切换点
websocket 的 rfc6455 标准中提到了协议升级,从http协议升级到websocket协议,用的办法是在http的request header中包含Connection: upgrade 和 Upgrade: websocket 以及其他验证相关的头。但这儿有一个小问题,在rfc6455中并没有明确的提到,就是服务器在接收到http请求头之后,如何从文本格式切换到帧格式?而websocket由于是请求/响应协议升级,没有附带的payload,因此,可以确定的是,在收到。
2024-03-19 11:07:25 443
原创 Websocket 中的 sub-protocol 和 extensions 的关系
Websocket 的 Sub-protocol 和 Extensions
2024-03-15 15:13:41 747
原创 XBox One 国行解锁
④:国行Xbox开机进入主界面后插入U盘,重启主机,重启之后,打开设置 ->系统->语言和区域,如果位置改变则解锁成功。去掉文本文档的扩展名.txt,然后文本文档就变成一个空白文件,然后将该空白文件放在U盘的根目录(不要隐藏该文件)。⑤:再次重启主机,并安装字体补丁。(解锁成功后可以取下U盘)①:将主机升级到最新版的操作系统。②:将U盘格式化为NTFS格式。
2024-02-12 14:12:00 1835
原创 foobar2000 突然无法正常输出DSD信号
之前一直在用foobar2000加外置dac听音乐,有一天突然发现听dsd的时候,dac面板显示输出的是PCM格式信号,而不是DSD信号,这让我觉得很奇怪,反复折腾了几次,卸载安装驱动什么的,依然如此,百思不得其解。后来无意中发现一个设置,在foobar的设置:tool -> sacd选项中,有一个output mode的选项。这一项被设置成了PCM,改成DSD之后,就解决了这个问题。
2023-11-26 10:37:21 1361
Compositor.rar
2020-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人