延时函数HAL_Delay的1ms误差
延时函数 HAL_Delay 的 1ms 误差
1234567891011121314151617181920212223/** * @brief This function provides minimum delay (in milliseconds) based * on variable incremented. * @note In the default implementation , SysTick timer is the source of time * base. It is used to generate interrupts at regular time intervals where * uwTick is incremented. * @note This function is declared as __weak to be overwritten in case of other * implementations in user file. * @param Delay specifies the delay tim ...
CTF工具安装流程
CTF 工具安装流程
Pwn
IDA Pro
版本号:v9.1 x64
运行安装包 ida-pro_91_x64win.exe,按提示完成安装,然后复制 keygen_patch 目录中的文件 keygen.py 和 idapro.hexlic 文件到 IDA Pro 主目录下(自定义修改 keygen.py 中的 name、email 字段),保存修改并运行 keygen.py 脚本。
运行 keygen.py 后会生成 patch 后的文件 ida.dll.patched 与 ida32.dll.patched。将原先的文件 ida.dll 和 ida32.dll 删除,然后将补丁文件 ida.dll.patched 与 ida32.dll.patched 分别重新命名为 ida.dll 和 ida32.dll。
然后运行下面脚本指定 Python 版本
12idapyswitch --force-path C:\Software\Anaconda\python3.dllidapyswitch # 再次运行,选择0即可
打开 IDA Pro 软件,[Hel ...
从复数到四元数
从复数到四元数
复数与二维旋转
设复数 ,则 将这个结果写成矩阵相乘的形式, 说明 矩阵 表示的几何变换与是复数乘法运算等价的。
一般地,向量 在二维平面中对应一个直角三角形,两个直角边长度为 和 ,斜边长为 ,即向量的模长,矩阵 的每个元素同时除以模长,得到 设向量 与 轴夹角为 ,则 . 与该矩阵相乘在二维平面上实现的效果是 被乘的向量绕原点逆时针旋转 .
由此可以发现,复数能够表示二维平面上的旋转,假设旋转角度为 ,定义单位复数旋转因子为 被旋转的向量 ,相乘得到被旋转 后的复数为 对应向量 在二维平面 中绕原点逆时针旋转了 .
四元数与三维旋转
本文仅使用右手坐标系。
在三维空间中,向量 绕某个旋转轴 旋转,可以将向量 分解为平行于 的分量 和垂直于 的分量 ,然后分别旋转这两个向量,再合并得到最后结果。
其中 始终与 重合,旋转 后的 ;
始终与 垂直,它的旋转可以看作二维平面内的旋转,如下图所示,
向量 绕旋转轴 , 旋转的结果
为了用“复数”形式表示类似的旋转,最简单的想法是 ...
红米AX6000路由器刷机流程记录
红米 AX6000 路由器刷机流程记录
Redmi AX6000 参数
参数
数值
参数
数值
产品型号
RB06
天线数量
4
分类
千兆双频 AX6000
信号放大器
独立八路
电源规格
12V@2A
网络接口
千兆网口 ×4
处理器
MT7986A 四核 2.0GHz
空间流
2.4GHz 4×4 5GHz× 4×4
内存
512MB
无线速率
1148Mbps 4804Mbps
闪存
128MB
最大频宽
160MHz
无线协议
Wi-Fi 6
注:Redmi AX6000 没有 2.5G 网口,考虑之后攒钱换一个接口更多的路由器……
电源适配器:
型号
输入
输出
AD-0241200200CN-1
100-240V~50/60Hz 0.7A
12V@2A
官方固件解锁 SSH
系统版本: 1.0.67 稳定版
将路由器重置后,后台默认地址是 ...
信号的多普勒展缩建模
信号的多普勒展缩建模
在“狭义相对论”的物理学假设下,光速是恒定的,是任何物体运动速度的上限。因此,信号在发送时刻就已经确定了其传播方向与传播距离,与后续收发机的运动无关。
假设发送机从时刻开始,每隔时间间隔,离散地发送一次复信号。时刻,接收机在距离发送机的位置,并且以一定的速度远离发送机运动。
感觉本文最初的假设,发送机在时刻发送的信号,其传播距离仅与有关,假设接收机在时刻收到该信号,则,表示传输时延。
发送机在时刻发送信号,此时二者的距离为,传输时延为,接收机收到信号的时刻为,以此类推,第个复信号的传输时延为 接收机接收到第个复信号的时刻为 接收机收到第个复信号与第个复信号的时间差为 而发送机发送第个复信号与第个复信号的时间差为,由此可以看出,经过多普勒的影响后,信号在接收端表现为平移+展缩的效果。
附录
平移+展缩的MATLAB仿真程序:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565 ...
平方根倒数计算
平方根倒数计算
12345678910111213141516float Q_rsqrt( float number ){ long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed return y;}
这是在《雷神之锤 ...
LeetCode 190. 颠倒二进制位
【LeetCode】 190. 颠倒二进制位
算法
以8比特为例,abcdefgh,每次运算交换“奇偶位”,即[badcfehg]→[dcbahgfe]→hgfedcba
123456789101112131415161718class Solution {public: unsigned reverseBits(unsigned n) const { n = n >> 1 & M1 | (n & M1) << 1; n = n >> 2 & M2 | (n & M2) << 2; n = n >> 4 & M4 | (n & M4) << 4; n = n >> 8 & M8 | (n & M8) << 8; // n = n >> 16 & M16 | (n & M16) << 1 ...
频偏对相关峰高度的影响
频偏对相关峰高度的影响
在接收机的捕获模块中,以相关峰高度作为捕获性能的衡量指标,当接收信号的相位与本地码相位对齐时,相关运算的结果会出现较大的相关峰,但如果存在频偏,会导致相关峰高度下降。下面推导相关峰高度与频偏的关系:
设捕获模块的输入信号的一个符号为 ,它被扩展为 个码片,忽略随机时延,即与本地 PN 码相位对齐时,时域表达式为
式中, 表示本地参考信号, 表示离散的加性高斯白噪声, 表示频偏, 表示采样周期。
捕获的输入信号与本地参考信号的相关结果为
忽略噪声项
,带入上式中得
当 远小于采样率 时, 近似为
当 时,峰值位置 ,零点位置对应 由此可以得出,相关峰随频偏的变化满足 函数,并且当频偏为 的整数倍时,相关峰高度为 ,MATLAB 仿真结果如图所示
在捕获模块频偏搜索的精度选择上,如果以 为步进设置频偏通道,在 的奇数倍时相关峰高度最低,为无频偏位置的 ,性能损失较大,如果以 为步进设置频偏通道,在 的奇数倍时相关峰高度最低,为无频偏位置的 ,性能损失较低,因此,综合捕获性能与资源消耗的考量,选择以 ...
FPGA虚拟双口RAM
FPGA虚拟双口RAM
给一段波形加发送时延,可以将其存储到BRAM IP核中,读地址比写地址晚响应的延迟采样点数(BRAM深度足够,即大于延迟采样点数),就达到了延迟的效果。对于常有效的信号波形来说这么做是可以的。但是对于只有在某几个时刻有效的信号来说,仍采用这种办法缓存,BRAM中存储的大多数数据是无效的,浪费了很多BRAM资源。
本文采用的办法是“虚拟”的RAM,读地址与写地址的关系不变,虚拟的写地址始终累加,虚拟的读地址延迟相应的采样点数。但是数据不写入RAM中,而是在数据有效时写入一个寄存器,并且标记对应的虚拟写地址为真实的读地址,当虚拟的读地址为真实读地址时从寄存器中读出数据。(testbench见附录)
如下图所示,数据data只有当valid拉高时有效,于是按照上述逻辑对data和valid信号延迟,当...dout_valid拉高时表示数据延迟了\(100\)个采样点。
特别感谢罗老师的耐心细致的讲解!
附录
123456789101112131415161718192021222324252627282930313233343536373 ...
缓存系统
缓存系统
最久未使用缓存机制
最久未使用(Least Recently Used, LRU)缓存机制,将最近最少使用的内容替换掉。
146. LRU 缓存
利用哈希表和双向链表实现LRU缓存机制,使查找、添加和删除都是的操作。
待缓存的内容以键值对key-value的形式存在,哈希表存储了已经存在于缓存区的内容的key。双向链表的节点按照访问时间排序,越靠近尾部,越久没有被访问。
读取缓存时,只需要在哈希表中查找是否存在key,存在则返回对应的value,同时,这是最新访问的key-value,就把它移动到链表头部,如果不存在,就将其直接插入到链表头部。
更新缓存时,直接将key-value更新到链表头部即可,如果超出缓存区容量,将尾部节点删除。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <unordered_ ...