<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Iron_man的博客]]></title><description><![CDATA[嵌入式Linux]]></description><link>https://blog.youkuaiyun.com/u011663005</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u011663005]]></copyright><item><title><![CDATA[复杂指针阅读技巧]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/117390369</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/117390369</guid><author>u011663005</author><pubDate>Sat, 29 May 2021 20:19:43 +0800</pubDate><description><![CDATA[int(*p1)(int*,int(*f)(int*));

//p1为指针，指向函数，指向函数的第一参数为int*类型，返回值为int；f也为函数指针，指向函数的参数为int*类型，返回值为int



int(*p2[5])(int*);

//p2为数组，数组包含5个元素，元素为指针，指向函数，函数类型为int(int*)==&gt;p2为指针数组



int(*(*p3)[5])(int*);

//p3为指针，数组指针，指向的数组有...]]></description><category></category></item><item><title><![CDATA[一级指针、二级指针的用法本质总结（指针的本质理解）]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/116616018</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/116616018</guid><author>u011663005</author><pubDate>Tue, 11 May 2021 00:12:02 +0800</pubDate><description><![CDATA[一、早期学习C语言的时候，C指针无疑就是最大的拦路虎，首先是概念不好理解，其次是就算理解了概念，在实际使用指针或者在代码中碰到指针的时候（尤其是一级、二级指针同时出现的时候），就更加模糊不清，最近花时间看了很多资料后终于完全理解了指针的用法本质（包括一级指针和二级指针），个人觉得这对平时我们的工程实践至关重要。至于指针的概念和含义，请自行查阅网络教材。

以下这段加粗的内容请反复阅读理解，直至真正理解其含义掌握其精髓：


1.当想通过外部函数修改变量值的时候，仅仅使用形参传值的做法是不能达到目的的，原因.]]></description><category></category></item><item><title><![CDATA[吴恩达最受欢迎AI课程机器学习Cousera《Machine Learning》课程完整版]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/104695494</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/104695494</guid><author>u011663005</author><pubDate>Mon, 05 Oct 2020 09:45:41 +0800</pubDate><description><![CDATA[百度网盘链接：https://pan.baidu.com/s/1jNvLV-dqO9DhkMsmmPlI8w 提取码: a644

内容说明：

1. 本课程简介：这门课基本涵盖了机器学习的主要知识点：线性回归、逻辑回归、支持向量机、神经网络、K-Means、异常检测等。课程中没有复杂的公式推导和理论分析，让机器学习初学者能够快速对整个机器学习知识点有比较整体的认识，非常方便初学者快速入门。

2...]]></description><category></category></item><item><title><![CDATA[C++中this与*this的区别]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/106151786</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/106151786</guid><author>u011663005</author><pubDate>Fri, 15 May 2020 23:33:54 +0800</pubDate><description><![CDATA[错误认知：
return *this返回当前对象， return this返回当前对象的地址（指向当前对象的指针）。

正确答案为：
return *this返回的是当前对象的克隆或者本身（若返回类型为A， 则是克隆， 若返回类型为A&amp;， 则是本身 ）。return this返回当前对象的地址（指向当前对象的指针）, 下面我们来看看程序吧：

#include &lt;iostream&gt;  
using namespace std;  
  
class A  
{  
public:  
 ]]></description><category></category></item><item><title><![CDATA[韦东山第3期嵌入式Linux项目-视频监控-3-在LCD上显示摄像头图像]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/94479426</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/94479426</guid><author>u011663005</author><pubDate>Wed, 10 Jul 2019 23:04:41 +0800</pubDate><description><![CDATA[韦东山第3期嵌入式Linux项目-视频监控-3-在LCD上显示摄像头图像

]]></description><category></category></item><item><title><![CDATA[韦东山第3期嵌入式Linux项目-视频监控-2-从零写USB摄像头驱动（UVC驱动）]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/92800940</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/92800940</guid><author>u011663005</author><pubDate>Tue, 02 Jul 2019 20:22:08 +0800</pubDate><description><![CDATA[一、从零写USB摄像头驱动—分析描述符

USB设备插入电脑后，电脑上就会相应的显示其是某种设备（U盘，摄像头，信号采集卡等等），表明这些设备“身份”的就叫做设备描述符。（就是一些格式化的数据）


USB摄像头的描述符：

使用 lsusb 工具可以将USB设备的详细信息打印出来，因此分析该工具的源码可以帮助我们打印描述符信息：
lsusb.c:
main
    dumpdev
       ...]]></description><category></category></item><item><title><![CDATA[韦东山第3期嵌入式Linux项目-视频监控-1-v4l2视频框架分析]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/92635148</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/92635148</guid><author>u011663005</author><pubDate>Wed, 26 Jun 2019 23:18:13 +0800</pubDate><description><![CDATA[韦东山第3期嵌入式Linux项目-视频监控-1

硬 件 ：电脑、 JZ2440 开发板、 UVC 摄像头(推荐使用) 系 统 ： Ubuntu9.10// 即光盘提供的那个虚拟机系统
Uboot ： u-boot-2012.04.01 // 即毕业班移植新 uboot 那个
Kernel ： linux-3.4.2 // 即毕业班移植新内核那个文件系统：
fs_mini_mdev_new.tar...]]></description><category></category></item><item><title><![CDATA[毕业班第2课移植最新UBOOT]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/91444628</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/91444628</guid><author>u011663005</author><pubDate>Mon, 17 Jun 2019 11:06:59 +0800</pubDate><description><![CDATA[毕业班第2课移植最新UBOOT（UBOOT 1.1.6为2006年版本）
一.下载、建立source insight工程、编译、烧写、如果无运行分析原因
tar xjf u-boot-2012.04.01.tar.bz2
cd u-boot-2012.04.01
make smdk2410_config //配置uboot
make
由于编译器版本的问题编译不成功，需要升级编译器：
安装最新的ar...]]></description><category></category></item><item><title><![CDATA[第30课 驱动调试]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/90648281</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/90648281</guid><author>u011663005</author><pubDate>Tue, 04 Jun 2019 21:13:09 +0800</pubDate><description><![CDATA[第30课 驱动调试


打印：printk，自制proc文件
自制工具
根据内核打印的段错误信息分析
修改内核


第1.1节 驱动调试之printk原理

1. 内核处理uboot传入的参数：
使用printk将内核的一些信息打印出来（通过串口或者LCD屏幕），那么printk函数中就必然会有操作这些硬件的实现。但是printk最终会将信息打印到哪里呢？（串口或者LCD）这是由uboot中的 b...]]></description><category></category></item><item><title><![CDATA[第28课 hotplug/uevent机制]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/90170693</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/90170693</guid><author>u011663005</author><pubDate>Mon, 13 May 2019 20:20:17 +0800</pubDate><description><![CDATA[第28课 hotplug/uevent机制
第一节 hotplug/uevent机制的介绍
热拔插设备
先来回顾之前的按键字符设备驱动程序：
首先创建一个file_operations结构体，

之后在入口函数中注册该设备，然后再创建类，再在类下创建设备：

这里有个问题：为什么要在注册了设备之后要创建类并在类下创建一个设备呢？？
这么做的目的是为了让mdev根据这些信息来创建设备节点
mdev又...]]></description><category></category></item><item><title><![CDATA[第 27 课 DMA 驱动程序]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/90054847</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/90054847</guid><author>u011663005</author><pubDate>Sat, 11 May 2019 23:00:36 +0800</pubDate><description><![CDATA[第1节 DMA的引入

]]></description><category></category></item><item><title><![CDATA[磁盘结构简介]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/88757696</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/88757696</guid><author>u011663005</author><pubDate>Sat, 23 Mar 2019 11:13:38 +0800</pubDate><description><![CDATA[磁盘结构简介
		
		
		
			&nbsp;
今天在学习《鸟哥的Linux私房菜》时，鸟哥讲到了磁盘结构，看得我云里雾里的。索性网上搜索，看到一篇比较好的博文，主要是图例比较精准，结合文字描述很快就搞明白了。&nbsp;
这里讲的主要是网上所谓的老式磁盘，它是由一个个盘片组成的，我们先从个盘片结构讲起。如图1所示，图中的一圈圈灰色同心圆为一条条磁道，从圆心向外画直线，可以将...]]></description><category></category></item><item><title><![CDATA[linux内核分析——CFS（完全公平调度算法）]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/88327060</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/88327060</guid><author>u011663005</author><pubDate>Fri, 08 Mar 2019 09:04:09 +0800</pubDate><description><![CDATA[linux内核分析——CFS（完全公平调度算法）
		
		
		
			1.1&amp;amp;nbsp;CFS原理
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;cfs定义了一种新的模型，它给cfs_rq（cfs的run&amp;amp;nbsp;queue）中的每一个进程安排一个虚拟时钟，vruntime。如果一个进程得以执行，随着时间的增长（也就是一个个tick的到来），其vruntime将不...]]></description><category></category></item><item><title><![CDATA[搭建Kubernetes集群踩坑日志之coreDNS 组件出现CrashLoopBackOff问题的解决]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/87937800</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/87937800</guid><author>u011663005</author><pubDate>Tue, 26 Feb 2019 17:30:50 +0800</pubDate><description><![CDATA[这段时间一直在学习基于Docker和Kubernetes搭建服务器集群的知识，由于之前没有云计算相关的基础，过程可以说是非常难受了，开始跟着大佬的帖子一步步来，即使这样也是踩了无数的坑。

这里先贴上一位大佬的教程贴：个人觉得这篇帖子算是基于高版本Kubernetes构建集群环境比较全面的帖子了。

使用Kubeadm(1.13+)快速搭建Kubernetes集群

https://www.cnb...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——第12课第8节 字符设备驱动程序之定时器防抖动]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81061499</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81061499</guid><author>u011663005</author><pubDate>Mon, 16 Jul 2018 20:29:54 +0800</pubDate><description><![CDATA[注：本文部分内容摘自《鱼树学员笔记》。



当按键按得比较快的时候，这里出现了两次中断值，也即产生了抖动。

这里产生了“抖动”，按键是机械开关，按下松开时里面的金属弹片可能抖动了好几次。这种抖动产生了多次“脉冲”导致多次中断。





方法：

使用定时器来防抖动。

定时器有两个概念：

① 超时时间：

② 时间到了之后的“处理函数”。

可以在中断处理中，如定时 10ms 后处理确定按...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——代码重定位005_重定位和清除BSS段的C函数实现]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81043613</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81043613</guid><author>u011663005</author><pubDate>Sat, 14 Jul 2018 16:16:48 +0800</pubDate><description><![CDATA[能用C函数就不要用汇编。进入start.S中修改代码：任务就是在init.c中分别实现上述两个C函数。void copy2sdram(volatile unsigned int *src, volatile unsigned int *dest, unsigned int len)   /* src(r1), dest(r2), len(r2-r1) */
{
	unsigned int i = ...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——代码重定位004_代码重定位与位置无关码]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81042699</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81042699</guid><author>u011663005</author><pubDate>Sat, 14 Jul 2018 14:49:02 +0800</pubDate><description><![CDATA[将程序（包含可运行的代码和数据）从一个位置（flash）移动至另外一个位置运行或进行数据的读写成为代码重定位。代码重定位的根本原因是改善某个存储介质的某些缺陷（例如存取速度，读写限制等等）。在实际中我们可以只重定位程序的某一段（如数据data段或者代码text段），或者将整个程序进行重定位。现在考虑将整个程序重定位至SDRAM所需要的技术细节：① 从flash中将程序复制到（重定位）SDRAM，要...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——代码重定位003_链接脚本的解析与改进]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81036615</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81036615</guid><author>u011663005</author><pubDate>Fri, 13 Jul 2018 22:36:41 +0800</pubDate><description><![CDATA[一、链接脚本的解析注意：① 链接脚本中首先放所有程序的代码段text，那么这些程序的代码段按照什么样的顺序排列呢？在Makefile中有这些程序的排序② 这里的data数据段设置了加载地址0x800，表明在生成的bin文件中，data段在0x800的位置，而前面没有指定加载地址的text代码段和rodata只读数据段存放在bin文件中的0地址开始的位置。③ data数据段的重定位功能由前面的tex...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——代码重定位002_链接脚本的引入]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81022962</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81022962</guid><author>u011663005</author><pubDate>Fri, 13 Jul 2018 11:33:52 +0800</pubDate><description><![CDATA[① NOR启动：② nand 启动：上次讲到的g_char不能按照程序正确输出的原因是nor启动的时候g_char在nor flash中，其不可写的特性决定了输出结果。现在能否修改Makefile让nor启动时讲代码拷贝到SDRAM中，这样就可以实现全局变量的可读可写了。现在想在nor flash启动的时候将其中的代码段拷贝至SDRAM中0地址起始的空间，将全局变量g_char拷贝至0x30000...]]></description><category></category></item><item><title><![CDATA[韦东山嵌入式Linux学习笔记之——代码重定位001_段的概念_重定位的引入]]></title><link>https://blog.youkuaiyun.com/u011663005/article/details/81015746</link><guid>https://blog.youkuaiyun.com/u011663005/article/details/81015746</guid><author>u011663005</author><pubDate>Thu, 12 Jul 2018 21:39:06 +0800</pubDate><description><![CDATA[在2440中，cpu的命令可以通过内存控制器直接到达SRAM、SDRAM、NOR flash中，因此可以将代码直接放在上述三种内存单元中直接运行，相应地就可以设置为SRAM、SDRAM或者NOR flash 启动机制。但是在实际应用中我们也可以设置nand flash启动，这是为什么呢？原因是这里用到了代码重定位的机制。（1）nand flash 启动： 随之而来的有一个问题，就是如果程序&amp;gt;...]]></description><category></category></item></channel></rss>