摘要: 这篇文章尝试使用 Haskhell 来重写常见的排序算法。这里不考虑*效率*,比如时间和空间上的,所以不会刻意去写成*尾递归*。插入排序=======插入排序是一种简单易懂的排序。这里分为两个步骤:1. 将一个元素插入一个已被排序的数列2. 对一个未排序的数列不停施以步骤 1首先步骤 1,要插入数 ... 阅读全文
posted @ 2014-11-28 15:11 lyyyuna 阅读(5490) 评论(5) 推荐(1) 编辑
摘要: 为了保持简洁,本文省去了对部分细节的描述,例如weak型变量,和GOT等重定位类型。本文假设读者了解ELF文件格式。代码在附件中。如果论坛不支持附件,可以发邮件给我要1ELF文件的装载在ELF文件中,使用section和program两种结构描述文件的内容。通常来说,ELF可重定位文件采用secti... 阅读全文
posted @ 2013-05-09 16:11 lyyyuna 阅读(2261) 评论(0) 推荐(0) 编辑
摘要: Notes on the Flat-Text TranscriptionThe content of this transcription differs from the content of theoriginal document in the following ways.1. Pag... 阅读全文
posted @ 2013-05-09 13:42 lyyyuna 阅读(464) 评论(0) 推荐(0) 编辑
摘要: chapter 4. building and linking with libraries=====在大型的软件中,用库来管理十分方便,也可以为代码复用省不少事。4.1 building libraries=====像 Program 函数一样,只需要调用 Library 函数就能生成库了。 Li... 阅读全文
posted @ 2013-04-22 14:38 lyyyuna 阅读(332) 评论(0) 推荐(0) 编辑
摘要: RTT在设计时虽然采用了c语言,但使用了面向对象的思想。所有的线程、事件设备等都是继承自object,且采用链表的方式统一管理。如图所示。对象控制块 /** * Base structure of Kernel object */ struct rt_object... 阅读全文
posted @ 2013-04-22 11:09 lyyyuna 阅读(470) 评论(0) 推荐(0) 编辑
摘要: /** * This function will change the previously allocated memory block. * * @param rmem pointer to memory allocated by rt_malloc * @param newsize the r... 阅读全文
posted @ 2013-04-19 15:20 lyyyuna 阅读(386) 评论(0) 推荐(0) 编辑
摘要: Chapter 3. Less Simple Things to do with builds在这章中,你将看到一些简单的编译配置例子。3.1 Specifying the name of the target (output) file=====当你使用 Program 来编译工程,默认的输出文件... 阅读全文
posted @ 2013-04-19 09:07 lyyyuna 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 如果是VIM7.3,不需要再下载 pythoncomplete.vim 这个插件,因为安装时自带了。但是, 必须保证编译安装 VIM 的时候启用了 Python 特性, 即:./configure--with-features=huge--enable-pythoninterp=yes 我们可以在v... 阅读全文
posted @ 2013-04-18 11:31 lyyyuna 阅读(252) 评论(0) 推荐(0) 编辑
摘要: rt-thread的小内存管理是其默认的堆内存管理算法。是采用静态链表来实现的,源文件为mem.c。1.数据结构===== struct heap_mem { /* magic and used flag */ rt_uint16_t magic;... 阅读全文
posted @ 2013-04-11 09:45 lyyyuna 阅读(620) 评论(0) 推荐(0) 编辑
摘要: 和前面类似,使用宏,就可以将变量输出至FinshFINSH_VAR_EXPORT(count, finsh_type_int, count variable for finsh);程序#include #include static rt_thread_t tid = RT_NULL;static ... 阅读全文
posted @ 2013-04-07 14:20 lyyyuna 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 可以直接在Finsh中运行自己定义的函数。官方有三种方式,我觉得第二种比较方便,其他就不介绍了。首先需要在application.c 中包含 finsh.h 头文件,然后在函数下方添加宏FINSH_FUNCTION_EXPORT(fun_with_arg, function with a argum... 阅读全文
posted @ 2013-04-07 14:09 lyyyuna 阅读(372) 评论(0) 推荐(0) 编辑
摘要: Finsh是调试的利器,它可以获取系统运行时信息,对任意寄存器和内存地址进行读写操作,还能直接调用系统函数访问系统变量。要使用这个功能,需要开启/* SECTION: Finsh, a C-Express shell */#define RT_USING_FINSH/* Using symbol t... 阅读全文
posted @ 2013-04-07 14:00 lyyyuna 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 定时器可以通过rt_timer_control(),来改变定时器的某些特性,比如定时时间。这里,一开始定时周期是100,并且在程序中使用 rt_tick_get()-tick来确认定时周期是否如预设那样。当8次之后,使用rt_timer_control(),将定时周期改为3000。实际效果通过打印的... 阅读全文
posted @ 2013-04-07 13:44 lyyyuna 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 动态和静态的意思和前面完全一样,这里不再重复。这里创建两个动态定时器,一个是周期的另一个是单次的。其中timeout() 函数都是回调函数,即定时时间到之后,操作系统会自动调用的函数。 程序:#include static rt_timer_t timer1;static rt_timer_t ti... 阅读全文
posted @ 2013-04-07 13:35 lyyyuna 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 定时器分为软件定时器和硬件定时器。硬件定时器,是指单片机本身提供的一种外设,能够产生定时事件,而且不占用CPU时间。优点是定时精度高,独立于CPU,还可灵活配置其他许多功能,例如PWM。而软件定时器是操作系统提供的一种定时接口,其精度取决于操作系统的tick时间,而RTOS的tick建立在硬件定时器... 阅读全文
posted @ 2013-04-07 13:30 lyyyuna 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 内存池是一种静态的内存管理方法。它预先将一块固定连续的内存区域划分成几个大小不同的块。使用者申请时就将对应大小的内存块给他。这种方法的优点是不会有内存碎片,但不够灵活,适用于需要频繁存取的场合,例如buffer。这个例子有两个线程。thread1不停分配内存块,但其中并没有使用delay() 来使自... 阅读全文
posted @ 2013-04-07 13:16 lyyyuna 阅读(269) 评论(0) 推荐(0) 编辑
摘要: realloc 用于重新分配内存的场景。如果原先通过 malloc分配的空间过小,则可通过realloc重新分配大小。当然具体实现的时候分两种情况,如果原内存块后有足够的空间,则之间将原内存块扩大,如果不够,则重新寻找一个地方,将原数据也拷贝至此。代码:#include struct rt_thre... 阅读全文
posted @ 2013-04-06 21:28 lyyyuna 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 和电脑上的大同小异,但是要注意的是安装的是 硬浮点版本 还是 软浮点版本。我的raspbian 是硬浮点版本的,所以我就选了硬浮点的JRE。下载地址 http://jdk8.java.net/fxarmpreview/先通过psftp或者u盘将下载的JRE拷贝到树莓派上,我选择的目录为 /usr/l... 阅读全文
posted @ 2013-04-04 17:11 lyyyuna 阅读(899) 评论(0) 推荐(0) 编辑
摘要: rt_malloc和rt_free 和 malloc free 类似,是用来在堆上分配内存的,RT-Thread中是用小内存法来实现的。下面程序就是不停分配内存和释放内存,并打印分配到的内存首地址。程序:#include struct rt_thread thread1;static rt_uint... 阅读全文
posted @ 2013-04-01 10:23 lyyyuna 阅读(1471) 评论(0) 推荐(0) 编辑
摘要: 事件也是一种在线程间同步的方式。RTT中,事件是一个32bit(4个字节)的变量,其中每一个位可以表示代表一种事件。接收事件的线程既可以在多个事件同时发生后(即多个bit位同时置1)触发,正如本例中线程1中第一条语句所演示的那样。也可以多个事件任意一个发生后(即多个bit位任意一个置位)就可以触发。... 阅读全文
posted @ 2013-04-01 10:09 lyyyuna 阅读(440) 评论(0) 推荐(0) 编辑