<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dsf031411的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dsf031411</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dsf031411]]></copyright><item><title><![CDATA[RT-Thread 05内存管理]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/78163164</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/78163164</guid><author>dsf031411</author><pubDate>Thu, 05 Oct 2017 22:10:44 +0800</pubDate><description><![CDATA[在计算系统中，变量、中间数据一般存放在系统存储空间中，只有在实际使用时才将它们从存储空间调入到中央处理器内部进行运算。通常存储空间可以分为两种：内部存储空间和外部存储空间。内部存储空间访问速度比较快，能够按照变量地址随机地访问，也就是我们通常所说的RAM（随机存储器），或电脑的内存；而外部存储空间内所保存的内容相对来说比较固定，即使掉电后数据也不会丢失，这就是通常所讲的ROM（只读存储器），也可以把]]></description><category></category></item><item><title><![CDATA[RT-Thread 04任务间同步及通讯 -互斥量、事件、邮箱、消息队列]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/78084333</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/78084333</guid><author>dsf031411</author><pubDate>Mon, 25 Sep 2017 13:52:38 +0800</pubDate><description><![CDATA[互斥量互斥量又叫相互排斥的信号量，是一种特殊的二值性信号量。它和信号量不同的是，它支持互斥量所有权、递归访问以及防止优先级翻转的特性。互斥量工作如 互斥量的工作示意图 所示。
互斥量的状态只有两种，开锁或闭锁（两种状态值）。当有线程持有它时，互斥量处于闭锁状态，由这个线程获得它的所有权。相反，当这个线程释放它时，将对互斥量进行开锁，失去它的所有权。当一个线程持有互斥量时，其他线程将不能够对它进行开锁]]></description><category></category></item><item><title><![CDATA[RT-Thread 03任务间同步及通讯 -中断关闭、调度器锁、信号量]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/78025009</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/78025009</guid><author>dsf031411</author><pubDate>Mon, 18 Sep 2017 23:11:29 +0800</pubDate><description><![CDATA[在多任务实时系统中，一项工作的完成往往可以通过多个任务协调的方式共同来完成，
例如一个任务从传感器中接收数据并且将数据写到共享内存中，同时另一个任务周期性的从共享内存中读取数据并发送去显示（如图 两个线程间的数据传递 ）
如果对共享内存的访问不是排他性的，那么各个线程间可能同时访问它。这将引起数据一致性的问题，例如，在显示线程试图显示数据之前，传感器线程还未完成数据的写入，那么显示将包含不同时间采样]]></description><category></category></item><item><title><![CDATA[STM32使用Jlink烧写与boot合并烧写的方法]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/77986386</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/77986386</guid><author>dsf031411</author><pubDate>Thu, 14 Sep 2017 22:47:12 +0800</pubDate><description><![CDATA[1 概述本文主要描述STM32的bootloader及应用程序HEX文件的合并，以及相应的烧写方法。
2 适用范围1.  相关的开发人员
2.  需要烧写的其他人员
3 创建烧写使用的HEX文件3.1 Hex文件的获取通过对ECU-R以及Bootloader程序的编译获得我们所需要的两个hex文件。ECU-R对应的HEX文件名为STM32_RTT_F107RC.hex，Bootloader对应的He]]></description><category></category></item><item><title><![CDATA[keil RT-Thread相关调试基本使用技巧]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/77986319</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/77986319</guid><author>dsf031411</author><pubDate>Thu, 14 Sep 2017 22:38:47 +0800</pubDate><description><![CDATA[1 概述本文档主要用于介绍STM32裸机的调方法以及RT-thread系统下的调试方法。两个例子都将以LED为例，裸机将以跑马灯为例，RT-thread将以心跳等为例进行讲解。2 STM32裸机调试方法打开“标准例程-V3.5库函数版本”目录下的“实验1跑马灯-库函数操作”项目作为本次实验的目标项目。下面将介绍两种方式进行调试：1、软件仿真、2、下载调试。 
相关调试按键介绍： 
 
图1：调试栏]]></description><category></category></item><item><title><![CDATA[RT-Thread 02定时器]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/77985523</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/77985523</guid><author>dsf031411</author><pubDate>Thu, 14 Sep 2017 21:31:30 +0800</pubDate><description><![CDATA[定时器管理定时器，是指从指定的时刻开始，经过一个指定时间，然后触发一个事件，类似定个时间提醒第二天能够按时起床。定时器有硬件定时器和软件定时器之分：1. ***硬件定时器***是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟，芯片向软件模块提供一组配置寄存器，接受控制输入，到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高，可以达到纳秒级别，并且是***中断触发***方]]></description><category></category></item><item><title><![CDATA[RT-Thread 01线程调度与管理]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/77951911</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/77951911</guid><author>dsf031411</author><pubDate>Tue, 12 Sep 2017 23:24:33 +0800</pubDate><description><![CDATA[2.1 实时系统的需求
  实时系统是一种需求倾向性的系统，对于实时的事件需要在第一时间内做出回应，而对非实时任务则可以在实时事件到达时为之让路——被抢占。所以实时系统也可以看成是一个等级系统，不同重要性的任务具有不同的优先等级：重要的事件能够优先被响应执行，非重要的事件可以适当往后推迟。 
     在RT-Thread实时操作系统中，任务采用了线程来实现，线程是RT-Thread中最基本的调度单]]></description><category></category></item><item><title><![CDATA[Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/72823741</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/72823741</guid><author>dsf031411</author><pubDate>Wed, 31 May 2017 20:45:40 +0800</pubDate><description><![CDATA[本文转载自 http://blog.youkuaiyun.com/u010893262/article/details/70847475




MDK开发环境从V4升级到V5后，支持包不再是集成到开发环境当中，而是封装在PACK中，需要自行安装，比较麻烦。

搭建MDK开发环境以及破解的方法，在前面的文章中有详细说明，这里不再赘述，有兴趣的可以参考：http://www.cnblogs.com]]></description><category></category></item><item><title><![CDATA[SPI总线协议]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/72677353</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/72677353</guid><author>dsf031411</author><pubDate>Wed, 24 May 2017 16:33:00 +0800</pubDate><description><![CDATA[SPI总线协议及SPI时序图详解


    SPI，是英语 Serial Peripheral Interface 的缩写，顾名思义就是串行外围设备接口。SPI，是一种高速的，全双工，同步的通信总线，并且在芯片的管脚上只占用四根线，节约了芯片的管脚，同时为
 PCB 的布上节省空间，提供方便，正是出于这种简单易用的特性，现在越来越多的芯片集成了这种通信协议。
    SPI 是一个环形]]></description><category></category></item><item><title><![CDATA[解放串口调试（使用JLink SEGGER RTT来打印和输入调试信息）]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/72581348</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/72581348</guid><author>dsf031411</author><pubDate>Sat, 20 May 2017 16:47:35 +0800</pubDate><description><![CDATA[解放串口调试（使用JLink SEGGER RTT来打印和输入调试信息）
之前调试一直使用的串口作为调试口，但是由于串口数量的限制所以必须找到另一种方法作为调试使用。于是在网上寻找到了这个方法，在此记录方便以后的查询。
1、使用JLINK SEGGER RTT打印调试信息
很简单，首先从Jlink官网上下载RTT代码，然后将这四个文件添加到自己工程中去，并且在主程序工程中添加SEGGER_R]]></description><category></category></item><item><title><![CDATA[RT-Thread的CPU使用率计算]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/72529490</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/72529490</guid><author>dsf031411</author><pubDate>Fri, 19 May 2017 15:13:45 +0800</pubDate><description><![CDATA[CPU 的使用率一般是我们比较关心的问题，在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率，并通过串口打印出来。

首先我们在初始化线程中设置好钩子函数，并在 LED 线程中给系统人为的加入很多“事情”，让其占用率变高，方便统计，然后每个 1 秒中打印一次 CPU 使用率。其中 CPU 的使用率我们是根据
 CPU 的空闲率反推出来的。

//CPU使用率
#include]]></description><category></category></item><item><title><![CDATA[深入了解DHCP的4步租约过程]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/72453368</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/72453368</guid><author>dsf031411</author><pubDate>Wed, 17 May 2017 22:02:52 +0800</pubDate><description><![CDATA[最近在调试STM32F107+LAN8720+lwip的过程中网络方面遇到了很多问题。同时因为自己刚刚接触STM32单片机方面的知识，还有很多方面需要学习的。闲话不多说，先让我们简单了解下DHCP相关的知识。
DHCP的4步租约过程
DHCP租约过程就是DHCP客户机动态获取IP地址的过程。

DHCP租约过程分为4步：

1、客户机请求IP（客户机发DHCPDISCOVER广播包）；]]></description><category></category></item><item><title><![CDATA[Linux系统编程巩固--04]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/52846214</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/52846214</guid><author>dsf031411</author><pubDate>Tue, 18 Oct 2016 09:51:18 +0800</pubDate><description><![CDATA[一.
sprintf:往字符串中输入数据
fprintf:往文件中输入数据


读写文件用那一套函数？标C还是UC函数
如果考虑通用性，就使用标C函数,如果确定只在Unix/Linux下使用，UC的也行


time a.out可以查看a.out的运行时间


文件读写的位置用偏移量记录,在文件表中存储了偏移量。函数lseek()可以随意移动偏移量



off_t]]></description><category></category></item><item><title><![CDATA[Linux系统编程巩固--03]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/52846089</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/52846089</guid><author>dsf031411</author><pubDate>Tue, 18 Oct 2016 09:37:18 +0800</pubDate><description><![CDATA[系统调用--因为用户空间不能直接访问内核空间,想完成功能又必须得到内核的支持.因此，内核层提供了系统调用,做用户空间进入内核空间的桥梁。系统调用是一系列的函数,包括各种系统的功能。我们系统编程接触的大多数都是系统调用



一.文件操作
非常常用的函数，包括读写函数和非读写函数
在linux中，几乎一切都是文件,目录，内存，各种硬件设备都可以看成文件
比如/dev/tty代表键盘和显]]></description><category></category></item><item><title><![CDATA[Linux系统编程巩固--02]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/52836589</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/52836589</guid><author>dsf031411</author><pubDate>Mon, 17 Oct 2016 10:31:49 +0800</pubDate><description><![CDATA[一.静态库
1.为什么需要库
二进制形式目标模块的包
a.o  |
b.o  |----abc.a----库
c.o  |

2.库的类型
1)静态库：扩展名.a，库中所封装的二进制代码,在链接阶段被复制到调用模块中
2)动态库：扩展名.so，库中所封装的二进制代码,在链接阶段并不复制到调用模块中，被嵌入到调用模块中的仅仅是被调用函数在共享库的地址，根据这个地址
动态执行共享库]]></description><category></category></item><item><title><![CDATA[Linux系统编程巩固--01]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/52836389</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/52836389</guid><author>dsf031411</author><pubDate>Mon, 17 Oct 2016 10:16:31 +0800</pubDate><description><![CDATA[学习Linux系统编程主要包括学习一下内容：开发环境、内存管理、文件系统、进程管理、信号处理、进程通信、线程管理、线程同步和网络编程。
一.Unix操作系统

1.美国AT&T，贝尔实验室
1971年
多用户，多任务，多处理器
商用

2.三个派系
1.system V
IBM AIX ....

2.berkley
freeBSD
metBSD
openBSD
.]]></description><category></category></item><item><title><![CDATA[深入理解Linux内核day10--信号]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/51325123</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/51325123</guid><author>dsf031411</author><pubDate>Thu, 05 May 2016 18:04:12 +0800</pubDate><description><![CDATA[信号
    信号在最早的Unix系统中即被引用，用于在用户态进程间通信。内核也用信号通知进程系统所发生的事件。信号已有30多年的历史，但只有很小的变化。
    
信号的作用
    信号（signal）是很短的消息，可以被发送到一个进程或一组进程。发送给进程的唯一信息通常是一个数，以此来标识信号。在标准信号中，对参数、信息或者其他相随的信息没有给与关注。
    名字前缀为SIG的一]]></description><category></category></item><item><title><![CDATA[深入理解Linux内核day09--系统调用]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/51322515</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/51322515</guid><author>dsf031411</author><pubDate>Thu, 05 May 2016 14:13:10 +0800</pubDate><description><![CDATA[系统调用
    操作系统为在用户态运行的进程与硬件设备（如CPU、磁盘、打印机等等）进行交互提供了一组接口。
    Unix系统通过向内核发出系统调用（system call）实现用户态进程和硬件设备之间的大部分接口。
    
POSIX API和系统调用
    让我们先强调下应用编程接口（API）与系统调用之间的不同。前者只是一个函数定义，说明了如何获得一个给定的服务；而后者是]]></description><category></category></item><item><title><![CDATA[深入理解Linux内核day08--进程线性地址空间]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/51320922</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/51320922</guid><author>dsf031411</author><pubDate>Thu, 05 May 2016 10:45:31 +0800</pubDate><description><![CDATA[进程地址空间
    内核中的函数以相当直截了当的方式获得动态内存：
        1.__get_free_pages()和alloc_pages()从分区页框分配器中获得页框。
        2.kmem_cache_alloc()和kmalloc()使用slab分配器为专门或通用对象分配快。
        3.vmalloc()和vmalloc_32()获得一块非连续的内存区。]]></description><category></category></item><item><title><![CDATA[深入理解Linux内核day07--内存管理]]></title><link>https://blog.youkuaiyun.com/dsf031411/article/details/51314555</link><guid>https://blog.youkuaiyun.com/dsf031411/article/details/51314555</guid><author>dsf031411</author><pubDate>Wed, 04 May 2016 14:22:46 +0800</pubDate><description><![CDATA[内存管理
    RAM的某些部分永久的分配给内核，并用来存放内核代码以及静态内核数据结构。
    RAM的其余部分称为动态内存（dynamic memory），这不仅是进程所需的宝贵资源，也是内核本身所需的宝贵资源。实际上，整个系统的性能取决于如何有效地管理动态内存。
    因此，现在所有多任务操作系统都在尽力优化对动态内存的使用，也就是说，尽可能做到当需要时分配，不需要时释放。
 ]]></description><category></category></item></channel></rss>