- 博客(98)
- 收藏
- 关注
原创 大话 RCU (read copy update)
然后厨房发话了,辣椒炒肉,清蒸鱼没有了,换成辣子鸡和红烧肉,这时候二号食堂开始上菜了,这时候站在门口的小姐姐拿出了一个新的牌子,请到二号食堂用餐。然后重点来了,此时此刻,现在一号食堂里面的学生还在点菜或者吃着,咱们不管,然后新来的学生都被新的牌子引导到二号食堂,即新的内存块去了。首先,我们要搞清楚一件事,指针它是一个变量,他在内存上也是占了空间的,然后他里面的值,是你申请的内存块的首地址。这里要提一嘴,RCU之所以能成,得益于内存对齐的指针修改是原子的,即门口的小姐姐换牌子是瞬间的事,不存在中间态。
2024-09-28 07:11:17 188
原创 man sched
thread 有两个属性,一个是调度策略(scheduling policy),调度优先级(scheduling priority)(SCHED OTHER,SCHED IDLE,SCHED BATCH)这三种normal调度策略中,调度优先级没得用,必须是0。(SCHED FIFO, SCHED RR)这两种real-time调度策略中,调度优先级1 (lew)to 99 (high)有的系统有可能不支持这么多,需要通过api确认。调度器维护理论上99个list,thread挂在这些list上。
2023-07-01 18:52:50 206
原创 Rust 30米的大砍刀
现在全归我编译器管,事无巨细,来龙去脉,一笔笔都给我讲清楚才让你编译过。现在我就来告诉你,东厂破不了的案由我西厂来破。一句话,东厂管得了的我西厂要管,东厂管不了的我西厂更要管!秦虽苛政,但确实战力大增,横扫六国,统一八荒。先斩后奏,皇权特许!核心概念,所有权,生命周期,不造是不是原创。东厂不敢杀的人我杀,东厂不敢管的事我管。栈一直是编译器控制的,咋整的他自己门清。数据都是放内存里面的:全局变量,堆,栈。生命周期,明确作用域,杜绝空引用。虚拟机管,周期挂起,扫描。程序员管,三分天注定,所有权,防止资源竞争。
2023-06-03 10:08:50 576
原创 docker
container container layer,image运行实体,加了一层可读写容器层。image read only layers,层层叠加的文件系统,unionfs实现。container只管应用程序,它只管应用程序。cgroup做软硬件资源管控,你只有这么多 /sys/fs/cgroup/dockerc/s架构,restful api进程间通信。还有如果有特殊需求,修改了内核和驱动,这算是是全局修改。namespace做隔离,让app看起来就他自己。多容器间可搭建网络通信。单容器,单应用原则。
2023-05-19 23:47:09 284
原创 py+cv+hsv抓特征
else:#exit()def cb(n):state = 1while 1:state = 0state = 1exit()cb(2)
2023-04-08 11:10:41 320
原创 cpp容器和ptr
vector 连续内存 随机访问 动态大小,不够时候从新申请内存,然后拷贝,会多整一点,所以尾巴有多出来的空位,尾巴存放快。deque碎片内存随机访问动态大小,多个碎片内存组成,所以头尾存放,只需要整头尾的那两个内存,但是遍历效率有影响。weak_ptr weak_count 访问权无控制权,解决循环依赖问题,lock访问。map红黑树 key:value key不可重复,按key进行排序。multimap红黑树 key可重复,value也可。unordered_set 哈希表未排序,迭代器慢。
2023-03-12 21:17:27 266
原创 lin总线 && xcp
携带(无条件,事件触发,偶发),诊断帧 (reg,resp),保留帧。针对场景,主机获取从机状态,主机设置从机状态,多从机事件上报,从机之间通信。事件触发 主机一个时隙发送,如果多从机事件上报,查询主机上的冲突解决进度表,用无条件查事件。偶发 同一帧时隙,主机发生变动,发送无条件给从机,通知变动。进度表,主机按照表挨个发送帧,帧时隙,一帧帧头到下一帧帧头的时间,必须是时基的倍数。单线,速率20kbps,12v,线与逻辑,单主多从,8byte payload。帧头必由主机发送,应答可有主机或者从机发送。
2023-03-12 21:14:13 484
原创 DTC(diagnostic trouble code)
操作周期(ooperation cycle),包含n个测试(test),测试ext状态有三no result,passed,failed,一旦passed或者failed则不进入noresult,实际noresult 与 passed都是0,通过本周期是否有测试结果bit区分。默认0,请求可置0,多个周期都有failed,满足周期数阈值置1,老化后置0,非排放ecu阈值为1.老化连续多个(一般40)操作周期没有fail。还原一个全局的状态。默认1,请求置1,新周期置1,test有结果置0。
2022-08-20 12:20:55 800
原创 Unified diagnostic services (UDS)
Diagnostic and Communication Management functional unitDiagnosticSessionControl (0x10) service用来切换会话。ECUReset (0x11) service用来重启serverSecurityAccess (0x27) service提升安全等级。CommunicationControl (0x28) service用来开关 发送和接收 sever的特定msgTesterPresent (0x3E) serv
2022-07-09 11:30:55 244
原创 Kalman
数学之美在于其严谨准确。然而现实世界不存在准确,一切的一切都是变动的,随机的。边界条件不封闭。客观规律不收敛。所以对世界事物的描述只能基于统计学,万事都要加个应该也许可能吧?好吧,还有另一种说法,如果一切归法,则世间的一切都是既定的,可追溯,可推导。在一切的初始,结局就已经注定。俗话说的好,如果不知道干啥,就出狼骑,如果不知道咋整,就找高斯。状态转移矩阵 状态量之间的相互作用状态控制矩阵&状态控制向量 对状态造成改变的其他因素协方差矩阵 估计值与真实值差距的估计测量变换矩阵 真实状态空间映射到测
2022-07-03 12:12:46 140
原创 为啥要使用全局变量
1.只能获取变量的值,没法获取变量的状态。比如变量是否可用,变量所有者是否已经初始化并开始工作生产数据,所有者有没有出现异常,变量是否是临界资源,整个数据块是否已经完整更新,只有上帝知道。2.小概率判断变赋值if(gVar=1),手滑手滑。3.没有使用者权限控制,谁都可以改,安全没法保证,总有刁民要害朕。4.难以追溯数据流,可能多生产者多消费者,调试起来贼酸爽。5.变量的所有者责任人不明,有的变量可能放在什么miscVar.c shareVar.c里面,这锅是哪个的,出来一下。6.功能块
2022-05-29 18:17:25 898 1
原创 cfar(Constant False-Alarm Rate)
cfar(Constant False-Alarm Rate) 算法,目的是从接收机rx里面提取出有效信号。普遍认为噪声的信号强度要低于有效信号,且噪声的强度是随环境变化的,未知的,随机的。本质就是在一群矮子里面找高子,至于什么是矮子,什么是高子,这个评判标准阈值是未知的。为了保证一定的虚警率,需要动态的调整评判标准阈值。原理,对待判断的信号滑动加窗口,前窗,后窗。对窗口内的信号加某种算子得出一个阈值,如果待判断的信号大于阈值,则认为是有效信号。不同的算子就成了不同的cfar子类算法,各有各的优
2022-05-14 19:49:51 1245
原创 毫米波雷达原理
这是一场fft的盛宴,对fft变换的极致演绎。fft的输入和输出输入:时域信号 实数个数 采样的点数+补零输出:频域信号 复数个数等于输入点数由复数可以计算出幅值,和相角信息。每个第n点对应的频点为 n*采样频率/(采样点数+补零),采样点数越多,分辨率越高主要测量 距离,速度,角度fmcw 调频等幅波(Frequency-Modulated Continuous Wave),一个chirp相当于一次扫频,时频图上是一条斜线。tx信号 - rx信号 = 中频信号,单一物体中...
2022-04-29 22:16:08 874
原创 JPEG编码和H264
jpeg中心思想,图片给人看的,针对人的视觉特性,对亮度敏感,色度不敏感,对高频模糊部分不敏感,低频边界敏感。类似于滤波。1.ycbcr编码,将亮度y,cb蓝色色度,cr红色色度提出来2.色度缩减,将红蓝色度2x2的取平均,色度数据量原来的1/4,亮度数据量不变3.离散余弦变换 ,用64张基础图象对亮度色度编码。基础图象叠加出被编码图像,实际逻辑就是转频域。基础表左上低频,右下高频。4.量化 ,频域的值除以量化表取整 ,删除掉图片的高频模糊部分。类似于滤波。红蓝的滤波滤的厉害,量化表数值大。量化表根
2022-02-03 21:39:19 3809
原创 sqlite ext4 日志解决信息存储一致性问题
ext4和sqlite都是日志型 信息存储系统,日志的存在是为了对抗在写入数据时发生异常错误之后,所保存信息的一致性。 所指异常可以发生在整个写入过程时间轴上的任意时间点。代价是额外的存储空间和转存时间。时间轴主要节点,应用层调用写入接口,生成日志,修改原始数据,删除日志 ext4 的日志会保存新的数据和meta,meta信息是数据在存储系统中,数据的组织架构中的存在的描述字段https://blog.csdn.net/u010039418/article/details/102...
2021-12-31 19:38:59 418
原创 Explore and draw a unknown map with DFS
#include <stdio.h>char *_map[]={" "," 0 0 0 0000 "," 00000 0 00000 "," 0 0 0 0 0 "," 0 0000000 0 0 "," 0000 0000000000 "," ",};char map[200.
2021-07-03 18:27:48 70
原创 LittleFs
官方文档:https://github.com/littlefs-project/littlefs/blob/master/DESIGN.md1.littlefs 主要解决嵌入式小平台的三大问题: 1、异常断电,导致数据损坏。 2、存储设备的磨损平衡。 3、可用的有限的RAM/ROM资源。2.FAT和ext2,基于数据块文件系统 简单,快速,小, 没有断电保护,磨损平衡3.JFFS,YAFFS,SPIFFS,环形logging文件系统。 有...
2021-07-03 18:26:00 564
原创 广度优先,dijkstra和A*的寻路走迷宫
广度优先算法: 四周扩散,每次步进一格,能找到起点到终点的最短路径。不能计算路径的cost。dijkstra算法: 三个set,总set,已确定最小cost set,未确定最小cost set。 四周扩散,优先从未确定最小cost set中pop出到起点cost最小节点,加入已确定set,并更新此节点周围未确定最小cost的节点cost。 精髓在于每次迭代,都优先pop最小cost,保证已确定cost set节点一定能最小cost。 能计算每个点到起点的cost...
2021-03-18 21:12:19 480
原创 5G odds
频域: RB 360K(resource block) = 12 * 子载波(30k) 100M带宽 有273个 RB时域: 帧 10ms (固定) 子帧 1ms (固定) 时隙 0.5ms (30k)基于子载波间隔 ofdm符号 14个 (固定)TDD帧格式: DDSU DDDSU DDDSU DDSUU S:10:2:2调制方式: 调幅 调频 调相 相互正交QAM:...
2021-01-24 19:58:53 26423 6
原创 Note 9026
ARM PROCESSOR AND DEVICE CALIBRATIONS 9026有一个内置M4 arm核,开机初始化的时候将固件烧录进去。 arm用来1.配置设备,2.intial calibration,3.track calibration。ARM STATE MACHINE OVERVIEW state 0:上电,烧录程序,启动。 state 1 : ready状态,可以接受指令,进行工作。SYSTEM INITIALIZATION 系统初始化有三个主要过程,pre M...
2020-07-20 21:34:34 1716 6
原创 IEEE1588
## 精度影响因素:(精度要求130ns)SLAVE端:timer的ts记录点,分别为phy,mac,协议栈(软件timer),精度递减。1、硬件Timer(phy,mac)。 1、内部Timer的tick最小粒度。 如果是100M频率,则时间粒度10ns,则Slave自己固有误差(2~3)×10ns,大约20ns左右。 2、时钟频率源(晶振)的精确度,PPM...
2020-05-24 11:32:23 1439
原创 PCIE
物理主体: host switch endpointhost: cpu, pcie rc(root complex) core, ram, 总线仲裁器endpoint:pcie endpoint core, ram, io dev逻辑主体: host cpu, 内存空间, io空间endpoint: 配置空间, bar空间(io空间, 内存空间)顶层逻辑,将endpoint的 内...
2020-05-24 11:28:15 265
原创 xilinx 10GbE ipcore
xilinx 10GbE ipcore 主要有 axi4-stream data-path 和 axi4-lite control-path,这两口都是接在MAC上,pcs/pma和mac通过xgmii接口和mdio接口连接。pcs/pma有两种,10GBASE-R or 10GBASE-KR。ieee1588v2只支持10GBASE-R。10GBASE-KR多支持了FEC(Forward Er...
2019-08-02 22:03:59 1917
原创 FreeRTOS
freertos 会接管 systick,作用时间片基准,系统不跑systick不会开始计数, 所以需要另外的timer作为hal_tick来源。freertos 会接管 svc,作用是用来开跑第一个线程。freertos 会接管 pendsv,作为线程切换的入口。freertos 线程切换,实际是线程上下文入栈出栈过程,栈在堆里面创建。上下文就是执行流在某个时刻的一个快照。freero...
2019-08-02 21:59:51 1527
原创 目测一个 阿里云 C-SDK mqtt通信小bug
版本3.0.1IOT_MQTT_Yieldwrapper_mqtt_yield_mqtt_cycleiotx_mc_cycleiotx_mc_read_packet三次read,一次用来判断是否有数据来,一次用来解析包长,一次用来收取整个包。 rc = c->ipstack.read(&c->ipstack, c->buf_r...
2019-06-21 20:33:35 830
原创 万能的http
通信协议的元结构TLV (tag length value),TSE (tag start end )。http大的结构是TLV结构,然后将tag再重构成若干TSE结构的组合,如此柔性的结构造就了其无所不能特性。树状的资源组织结构,get post put delete RESTful设计。短连接,用cookie和session保持会话,单向轮询,用upgrade升级成websocket成为双向长...
2018-06-11 10:34:31 189
原创 随手用libcurl写个ota框框
#include <stdlib.h>#include <stdio.h>#include <sys/stat.h>#include <curl/curl.h>#include <time.h>#include <string.h>#define SOCK_TIMEOUT 5#define OTA_STATE...
2018-05-26 09:31:10 285
原创 手写各种排序
#include <stdio.h>int partition(char *A, int p, int q){ int i = p; int j = p - 1; char tmp; while(i != q){ if(A[i] < A[q]){ j++; tmp = A[i]; A[i] = A[j]; A[j] = tmp; ...
2018-04-29 11:07:09 438
原创 温故而知新
堆排 建立堆, 维护堆的属性 一次拿掉一个,然后维护属性,二分的结构 使得维护属性只要logn的时间冒泡也是一次拿走一个 ,但是线性的结构 每次没有节省时间快排 ,一次确定 一个值的位置, 然后二分,缩小问题的范围。floyd找最短 ,一次更新 将状态改为经过固定点的 最短距离 ,循环 遍历每个点,则结果为 每个点到每个点的最短距离。dijkstr
2018-01-14 11:11:45 193
原创 呵呵
传统的回合制游戏,攻击和防御做减法 血量 ,改进加一个速度,速度越大出手次数越多。对战游戏其实跟回合制游戏没有本质区别,只是回合的时间缩短到一秒钟30个回合左右(游戏的帧数,应该更低,应该按照玩家的操作速度为回合时长)。这游戏本质是增加攻击,防御和血量,增加的方法通过金钱买装备提高三维。但是单位时间的金币是有限的,三条兵线,野区,唯一变量是杀人,杀人是此涨彼消的,而且游戏设计者也鼓励杀人,增加游戏
2017-11-05 22:17:55 157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人