<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[为民除害de专栏]]></title><description><![CDATA[目前仍然很捞]]></description><link>https://blog.youkuaiyun.com/asdddaa</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; asdddaa]]></copyright><item><title><![CDATA[001、初学Linux内核时的弯路和恐惧心理]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/132964799</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/132964799</guid><author>asdddaa</author><pubDate>Mon, 18 Sep 2023 09:46:51 +0800</pubDate><description><![CDATA[1.用自己的话，重新阐述一遍《深入理解linux内核》。
2.代码流程图，数据结构图，关键概念，关键API。
3.是什么，为什么，怎么做。
4.调试代码，观察对用户态内核态有什么影响。]]></description><category></category></item><item><title><![CDATA[浮点数在计算机中的表示，程序中浮点数的取值和比较。]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/125154975</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/125154975</guid><author>asdddaa</author><pubDate>Wed, 08 Jun 2022 07:31:33 +0800</pubDate><description><![CDATA[整数部分除2取余，小数部分乘2取整。
IEEE 754]]></description><category></category></item><item><title><![CDATA[使用 volatile 破坏系统代码的九种方法]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124898704</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124898704</guid><author>asdddaa</author><pubDate>Sat, 21 May 2022 17:46:48 +0800</pubDate><description><![CDATA[首先怼上：
It’s hard to overstate how bad an idea it is for a compiler to use strange heuristics about code structure to guess the developer’s intent.
编译器使用奇怪的试探法来猜测开发人员的意图，这个想法有多糟糕，怎么强调都不为过。
&nbsp;
&nbsp;
1 两个典型用法
（1）
#define TCNT1 (*(volatile uint16_t *)(0x4C]]></description><category></category></item><item><title><![CDATA[linux lib/list_sort.c排序算法]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124557464</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124557464</guid><author>asdddaa</author><pubDate>Tue, 03 May 2022 16:46:19 +0800</pubDate><description><![CDATA[linux lib/list_sort.c排序算法
没看懂，留念一下。
patch地址是https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1957556.html
&nbsp;
&nbsp;
知识点：
__attribute__((nonnull)) 让 compiler 对指定位置的 pointer 是 NULL 时发出警告。
比如：
__attribute__((nonnull(2,3)))
void list_sort(void ]]></description><category></category></item><item><title><![CDATA[Linux中的READ_ONCE、WRITE_ONCE]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124509306</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124509306</guid><author>asdddaa</author><pubDate>Sat, 30 Apr 2022 10:42:00 +0800</pubDate><description><![CDATA[READ_ONCE宏
#define READ_ONCE(x) __READ_ONCE(x, 1)

#define __READ_ONCE(x, check)                       \
({                                  \
    union { typeof(x) __val; char __c[1]; } __u;            \
    if (check)                          \
        _]]></description><category></category></item><item><title><![CDATA[链表快速排序quick-sort（递归+迭代）]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124418343</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124418343</guid><author>asdddaa</author><pubDate>Tue, 26 Apr 2022 01:15:24 +0800</pubDate><description><![CDATA[递归版
直接上代码。
static void list_qsort(struct list_head *head)
{
    struct list_head list_less, list_greater;
    struct listitem *pivot;
    struct listitem *item = NULL, *is = NULL;

    if (list_empty(head) || list_is_singular(head))
        return;

    IN]]></description><category></category></item><item><title><![CDATA[Linux中的List，HList 和 Hash Table]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124417834</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124417834</guid><author>asdddaa</author><pubDate>Tue, 26 Apr 2022 00:37:58 +0800</pubDate><description><![CDATA[本文是转载文章，如果有授权问题，请联系我删除。
https://danielmaker.github.io/blog/linux/list_hlist_hashtable.html
&nbsp;
&nbsp;
List
linux里的list定义：include/linux/types.h
struct list_head {
    struct list_head *next, *prev;
};


container_of
/**
 * container_of - cast a member of]]></description><category></category></item><item><title><![CDATA[你所不知道的C语言——链表内是否有环（龟兔赛跑算法）]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124335462</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124335462</guid><author>asdddaa</author><pubDate>Fri, 22 Apr 2022 00:58:09 +0800</pubDate><description><![CDATA[判断链表中是否有环，
这也是力扣的题：
141 Linked List Cycle 
142 Linked List Cycle II
146 LRU缓存
不多比比，直接上代码：
变量 mu 指的是 碰头的节点
变量 lamda 指的是 环的长度
static inline Node *move(Node *cur) { return cur ? cur-&gt;next : NULL; }

bool cycle_finding(Node *HEAD, Node **TAIL, int *length, ]]></description><category></category></item><item><title><![CDATA[你所不知道的C语言——链表]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124311467</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124311467</guid><author>asdddaa</author><pubDate>Thu, 21 Apr 2022 02:02:14 +0800</pubDate><description><![CDATA[linus嘴里的good taste
在一次TED演讲中，林老大在14分钟提到，代码的品味。The mind behind linux
说实话，这是我第一次听到林老大的声线。
看下边一段代码：
void remove_list_node(List *list, Node *target)
{
    Node *prev = NULL;
    Node *current = list-&gt;head;
    // Walk the list
    while (current != target) ]]></description><category></category></item><item><title><![CDATA[密码攻击——无分支的代码，执行时间是常量]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124232988</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124232988</guid><author>asdddaa</author><pubDate>Sun, 17 Apr 2022 18:08:29 +0800</pubDate><description><![CDATA[基于时间的密码攻击
考虑下边的代码
int memcmp(const void *s1, const void *s2, size_t n) {
    if (n != 0) {
        const unsigned char *p1 = s1, *p2 = s2;
        do {
            if (*p1++ != *p2++)
                return ((*--p1) - (*--p2));
        } while (--n != 0);
]]></description><category></category></item><item><title><![CDATA[科普文章-另一个视角解读计算机编码(修订版)【一个吊丝的个人理解】]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/124224043</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/124224043</guid><author>asdddaa</author><pubDate>Sun, 17 Apr 2022 02:56:51 +0800</pubDate><description><![CDATA[本文引用文章地址

科普文章-另一个视角解读计算机编码(修订版)_dog250的博客-优快云博客https://blog.youkuaiyun.com/dog250/article/details/73381875现将其内容搞下来，自己加一些理解。以下解读中，方括号是吊丝加上的。



第一部分 另一个视角解读计算机编码-补码编码

数学的计算机表示

数学是一个完全抽象的学科，而计算机是这个学科的一种形象化的实现，显然无法处理一些仅在抽象意义上有意义的特殊“数字”，比如无穷之类的东西。像数学中的加法，乘法这样运算，]]></description><category></category></item><item><title><![CDATA[深入理解linux虚拟内存管理--02 描述物理内存]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122420298</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122420298</guid><author>asdddaa</author><pubDate>Mon, 10 Jan 2022 22:18:42 +0800</pubDate><description><![CDATA[几个概念：



非一致内存访问 Non-Uniform Memory Access (NUMA)
一致内存访问（UMA）
参考：
NUMA和UMA



在Linux中，内存的每个bank被认为是一个节点（node），并用struct pg_data_t来表示。
系统中的每个node都被一个pgdat_list链表管理，此链表以NULL结尾。
pg_data_t结构体的node_next字段用于链接到下一个节点。
PC这种UMA结构的机器，只使用一个静态pg_data_t变量：contig_page_da]]></description><category></category></item><item><title><![CDATA[深入理解linux虚拟内存管理--01 简介]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122420007</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122420007</guid><author>asdddaa</author><pubDate>Mon, 10 Jan 2022 21:47:21 +0800</pubDate><description><![CDATA[英文原版书地址
https://www.kernel.org/doc/gorman/html/understand/understand001.html
]]></description><category></category></item><item><title><![CDATA[学习shell之后，实战分析]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445304</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445304</guid><author>asdddaa</author><pubDate>Wed, 21 Mar 2018 11:07:00 +0800</pubDate><description><![CDATA[#!/bin/bash

###############################################################################
#Variables
#查找project目录,以及子目录的所有文档！其中以"GCC/Makefile"结尾的！
export PROJECT_LIST=$(find project | grep "GCC/M...]]></description><category></category></item><item><title><![CDATA[二叉树，二叉排序树，红黑树 学习]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445303</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445303</guid><author>asdddaa</author><pubDate>Mon, 15 Jan 2018 19:36:00 +0800</pubDate><description><![CDATA[二叉排序树是一种比较有用的折衷方案。  数组的搜索比较方便，可以直接用下标，但删除或者插入某些元素就比较麻烦。  链表与之相反，删除和插入元素很快，但查找很慢。  二叉排序树就既有链表的好处，也有数组的好处。  在处理大批量的动态的数据是比较有用。
二叉树数据结构：

typedef struct _BiTNode  
{  
    int data;  
    _BiT...]]></description><category></category></item><item><title><![CDATA[哈希表 学习]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445302</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445302</guid><author>asdddaa</author><pubDate>Mon, 15 Jan 2018 15:05:00 +0800</pubDate><description><![CDATA[看了几篇文章，主要意思就是用简单的值index，去索引复杂的值key，进而找到想要的值value.
哈希算法主旨：index = f(key)
数据存放格式：(key.value)
但是存在问题是，
1.哈希算法使不同的key产生相同的index
2.分配给哈希表的内存满了之后，整个哈希表的迁移太累赘了。
针对第一个问题，下面介绍两个方案：
拉链法：http://www.cnblogs.com...]]></description><category></category></item><item><title><![CDATA[freeRTOS 总结几句]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445301</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445301</guid><author>asdddaa</author><pubDate>Fri, 22 Dec 2017 02:36:00 +0800</pubDate><description><![CDATA[一、列表与列表项

二、队列

三、列表、与TCB里的列表项


1. 任务就绪列表：调度器切换任务时的目的列表。每个优先级一个任务就绪列表。2. 任务挂起就绪列表：调度器挂起时，如有任务准备就绪，只能先进任务挂起就绪列表。当调度器恢复时，任务从挂起就绪列表，移动到任务就绪列表。3. 任务挂起列表：被suspended的任务。4. 延时列表、溢出延时列表：当调用TaskDelay或者等待信号...]]></description><category></category></item><item><title><![CDATA[HardFault分析]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445300</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445300</guid><author>asdddaa</author><pubDate>Thu, 07 Dec 2017 15:56:00 +0800</pubDate><description><![CDATA[segger官方也有hardFault相关的文档和代码，去这个页面ctrl+F搜索hardfault，可以看到文档和相关代码：https://www.segger.com/downloads/application-notes/
参考keil官方文档和相关代码 apnt209 ：http://www.keil.com/appnotes/docs/apnt_209.asp
以及一个开源的hardF...]]></description><category></category></item><item><title><![CDATA[苏州之旅有感]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445299</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445299</guid><author>asdddaa</author><pubDate>Tue, 05 Dec 2017 10:28:00 +0800</pubDate><description><![CDATA[苏州speech的攻城狮做的是算法，我们这个项目涉及到音频算法，我想这可能是人家的高端所在吧。
继续思考，其实视频算法，也一定是这样的。
未来的AI机器，肯定会使用这些音视频算法，而且，会使用电机控制算法！
这是我所能想象到的。
剩下的比较式想法是，通用的SPI、IIC、串口已经是必须具备的技能，
USB、TCP/IP、蓝牙、zigbee
以下是某位网友的见解：

。
...]]></description><category></category></item><item><title><![CDATA[freeRTOS 内存管理]]></title><link>https://blog.youkuaiyun.com/asdddaa/article/details/122445298</link><guid>https://blog.youkuaiyun.com/asdddaa/article/details/122445298</guid><author>asdddaa</author><pubDate>Wed, 29 Nov 2017 02:18:00 +0800</pubDate><description><![CDATA[标准 C 库中的 malloc()和 free()也可以实现动态内存管理，但是如下原因限制了其使用：
● 在小型的嵌入式系统中效率不高。● 会占用很多的代码空间。● 它们不是线程安全的。● 具有不确定性，每次执行所用的时间不同。● 会导致内存碎片。● 使链接器的配置变得复杂。
五种内存分配方案： FreeRTOS-&gt;Source-&gt;portable-&gt;MemMang
FreeR...]]></description><category></category></item></channel></rss>