Cc又菜又帅
码龄5年
关注
提问 私信
  • 博客:7,064
    7,064
    总访问量
  • 18
    原创
  • 1,379,537
    排名
  • 216
    粉丝
  • 3
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2020-06-07
博客简介:

weixin_48450161的博客

查看详细资料
  • 原力等级
    当前等级
    1
    当前总分
    95
    当月
    0
个人成就
  • 获得34次点赞
  • 内容获得5次评论
  • 获得65次收藏
创作历程
  • 1篇
    2024年
  • 8篇
    2023年
  • 9篇
    2020年
成就勋章
TA的专栏
  • Linux内核
    6篇
  • ARM64架构
    2篇
  • Linux
    1篇
  • LeetCode
    6篇
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

树莓派5移植rt-patch

笔者想用树莓派5做运动控制器,但是原生linux的实时性比较差,为了达到硬实时,需要移植rt-patch。
原创
发布博客 2024.03.03 ·
933 阅读 ·
8 点赞 ·
0 评论 ·
16 收藏

perf采火焰图

Perf的全名是performance Event,通过perf,程序可以利用PMU、tracepoint获取内核的性能信息。Perf可以分析的事件非常多,可以分析hardware event,如cpu-cycle、instructions、cache-misses、branch-misses等;可以分析software event,如page-faults、context-switches等,也可以通过software event来采集火焰图,另一种就是tracepoint event。
原创
发布博客 2023.09.10 ·
277 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

kprobe源码分析

kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2005年合入Linux kernel。probe的含义是像一个探针,可以不修改分析对象源码的情况下,获取Kernel的运行时信息。kprobe的实现原理是把指定地址(探测点)的指令替换成一个可以让cpu进入debug模式的指令,使执行路径暂停,跳转到probe 处理函数后收集、修改信息,再跳转回来继续执行。
原创
发布博客 2023.09.10 ·
298 阅读 ·
1 点赞 ·
2 评论 ·
0 收藏

ARM64栈结构浅析

SP指针在进入函数的时候一次性偏移了64字节,之后再也没有移动过SP指针,所以答案是否定的,个人推测是编译的时候编译器先扫了一遍代码,如果有定义局部变量的地方就提到前面去,如果有依赖后面的变量(例如int e = b + c),不能直接确定其值的情况,编译器会拆分成多个指令。在编译阶段就已经确定了b的地址,运行的时候可以说和b这个名字再没关系,符号表保存的是函数等(动态链接可能有变量名?1、写程序的时候,有的编译器支持在代码块中间定义一个局部变量,那么SP指针会在定义的时候再进行偏移吗?
原创
发布博客 2023.05.08 ·
477 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

ARM64汇编指令

ARM64中栈空间以16字节(128bit)作为一个存储单元,而stp和ldp指令可以同时操作两个寄存器,所以出入栈一般用stp和ldp指令实现。调用ret指令会把lr寄存器的值放在PC寄存器里,从而跳转回下一条指令。ARM64有34个寄存器,包括31个通用寄存器、SP、PC、CPSR。放在寄存器lr(x30)中,再跳转到ffff000008dc566c。注意:PC寄存器的值不能直接改写,但可以用ret指令间接改写。负载将寄存器lr(x30)的值放入PC寄存器。用于寄存器和内存之间传数据。
原创
发布博客 2023.05.08 ·
1881 阅读 ·
1 点赞 ·
0 评论 ·
12 收藏

Linux经典自旋锁

3、"eor %w1, %w2, %w0, lsr #16"为什么能去除lockval的next域。STR是将寄存器中的数字载入内存。格式如下:STR{条件} 源寄存器,<存储器地址>2、大小端模式不同,为什么TICKET_SHIFT能写死为16。LDR是将内存的数据加载到寄存器中,或是载入立即数。1、为什么同时用了ROR和LSR,貌似用一个就够了。4、“发送本地事件,避免在独占加载前忘记解锁”在寄存器之间移动数据,或者向寄存器中写立即数。4、CBZ和CBNZ。
原创
发布博客 2023.03.16 ·
232 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux主线程与子线程关系

Linux主线程退出后父子关系
原创
发布博客 2023.02.03 ·
339 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Linux调度时机(抢占&调度)

Linux内核调度时机
原创
发布博客 2023.01.08 ·
1157 阅读 ·
23 点赞 ·
0 评论 ·
31 收藏

Linux内存反向映射

Linux内存反向映射
原创
发布博客 2023.01.02 ·
478 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

剑指 Offer 13. 机器人的运动范围

回溯法,做的时候对 递归的结束条件 想不出,1、觉得一个节点的上下左右遍历一定要满足一定顺序,不然会丢项。2、终止条件为一个点不满足数位之和<=K,之后它的上下左右都不访问了,上右不看没毛病,那左下呢,怕后来给漏了,换个顺序测试了一下,都通过了测试,这个现象的本质还没弄懂……#include <vector>#include <iostream>using namespace std;//剑指 Offer 13. 机器人的运动范围class Solution {.
原创
发布博客 2020.12.08 ·
80 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

剑指 Offer 12. 矩阵中的路径

剑指 Offer 12. 矩阵中的路径#include <vector>#include <iostream>using namespace std;//剑指 Offer 12. 矩阵中的路径class Solution {public: bool exist(vector<vector<char>>& board, string word) { //初始化visited矩阵 vector<vect
原创
发布博客 2020.12.08 ·
76 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

剑指 Offer 11. 旋转数组的最小数字

总结一下,大方向是使用二分法,首先分两种情况未旋转(如{1 2 3 4 5})和旋转(如{3 4 5 1 2}),然后旋转的情况里面要特别注意特殊情况和>=(<=)的情况; >=(<=)就是说中间值和两边之一一样,比较好处理。特殊情况为{(10 10 10 1 10)}因为和{( 10 1 10 10 10)}分不清,也就是二分的中间和两边相等,这种情况不会出现在二分的过程中,只会出现在一开始的情形里。所以判断到这种情况后,只能采用简单排序。```cpp```cpp#.
原创
发布博客 2020.12.07 ·
89 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

剑指 Offer 04. 二维数组中的查找

剑指 Offer 04. 二维数组中的查找一道“简单”的题搞了我好半天#include <vector>using namespace std;//剑指 Offer 04. 二维数组中的查找class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if ((matrix.size() == 0) ||
原创
发布博客 2020.10.29 ·
76 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LeetCode 3. 无重复字符的最长子串

这种类型题第一次做,还是花了比较长的时间的,一共写了两三个版本才写出比较快的方法1、最后的方法:44ms左右,使用滑动窗口,创建左右两个“指针”,一个哈希表保存<字母,字母在字符创中的索引>,如果后面发现有重复了,就把重复的字母之前都删除掉,改变这个字母的哈希表的值,改变左指针位置。好的测试案例有:“abcbacbb”,“dvdf”,“”,“vdsdf”#include <list>#include <algorithm>#include <set>
原创
发布博客 2020.10.21 ·
75 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LeetCode 98. 验证二叉搜索树

1.第一种方法是使用递归,我没有写,题解里有2.第二种方法是使用堆栈,开始我忽略了这种情况只做了相邻的判断,怎么把这个顶点和上面所有顶点都比较呢,递归是把上届下届都作为入口参数,堆栈的中序遍历有一个性质:二叉搜索树的中序遍历是递增的,用这个性质就可以判断了,这里还有个坑,就是比较初始值得给一个很小很小的,int的范围是(-2147483648~2147483647),占用4个字节,有一个输入是[-2147483648]; long和int本质是一样的,所以要用long long,再就没啥了class.
原创
发布博客 2020.10.19 ·
97 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

leetcode 96. 不同的二叉搜索树

第一次尝试: //递归超时了int F(int n) { if (n == 0) { return 1; } else if (n == 1) { return 1; } else { int res = 0; for (int i = 1; i < n+1; i++) { res += F(i - 1) * F(n - i); //pri.
原创
发布博客 2020.10.19 ·
95 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

19. 删除链表的倒数第N个节点

简单记录/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next
原创
发布博客 2020.10.18 ·
151 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

LeetCode 1462. 课程安排 IV

LeetCode 1462. 课程安排 IVidea:BFS+setdata:20201014#include <vector>#include <list>#include <algorithm>#include <set>#include <queue>using namespace std;/*******************///LeetCode 1462. 课程安排 IV //看了T101402LC例程后我的程序
原创
发布博客 2020.10.14 ·
218 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多