摘要: rm命令 在linux中创建文件很容易,系统中随时会有文件变得过时且毫无用处。用户可以用rm命令将其删除。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。 rm命令的一般形式为: rm [选... 阅读全文
posted @ 2013-02-26 13:23 lyyyuna 阅读(915) 评论(0) 推荐(0) 编辑
摘要: 这里,使用信号量来同步两个线程。简单来说,线程每隔一定的时间扫描按键。一旦其检测到有效的按键,便release 信号量,使得线程2 从挂起进入 运行态,向串口打印按键信息。这样,便实现了两个线程的同步。程序:#include #include "stm32f10x.h"#define KEY_POR... 阅读全文
posted @ 2013-02-25 21:31 lyyyuna 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 信号量的解释:来自百度百科:信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。RT-Thread 的信号量有静态和动态,这... 阅读全文
posted @ 2013-02-25 21:20 lyyyuna 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 这一小节是只是一个演示问题的实验。在编程中,时常会碰到全局变量,程序在不同的地方都可以对全局变量进行修改,引起很大的麻烦。在RTOS中,尤其如此。因为不同的线程都有可能修改一个全局变量,而修改的顺序确实由调度决定的,不能通过人力决定。当然,这个问题不是只限于全局变量。例如两个线程都可以通过串口向终端... 阅读全文
posted @ 2013-02-25 21:01 lyyyuna 阅读(208) 评论(0) 推荐(0) 编辑
摘要: RTT 的mutex 实现了优先级继承算法,可用其来解决优先级反转的问题。还是来自官网:thread2和worker线程虽然优先级比thread1要高,但是这两个线程均在进程开始出就执行了延时函数,于是轮到 thread1 执行,然后 thread1获得互斥量,thread2延时结束后,虽然它的优先... 阅读全文
posted @ 2013-02-18 11:44 lyyyuna 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 优先级反转是不希望出现的现象。简单来说,有三个线程A, B, C, 优先级A>B>C,A和C有共享资源S。A.B挂起,C运行且有S,A没有S所以一直挂起,B进入调度,调度完之后C再运行直到释放S之后,A才能运行。可以看出,A虽然优先级最高,但实际运行却是最后一个运行,其实际的优先级反转了。下面这段来... 阅读全文
posted @ 2013-02-18 11:37 lyyyuna 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 之前说过,相同优先级的线程,在自己的时间片用光之后,会被剥夺调度器,让给同优先级的其他线程。程序:#include static struct rt_thread thread1;static struct rt_thread thread2;static char thread1_stack[51... 阅读全文
posted @ 2013-02-18 11:27 lyyyuna 阅读(270) 评论(0) 推荐(0) 编辑
摘要: RTT 是抢占式的RTOS,高优先级的线程会先执行。这个例程显示了是如何抢占的。解释我懒得写了,下面这段来自官网论坛:因为更高的优先级,thread1率先得到执行,随后它调用延时,时间为3个系统tick,于是thread2得到执行。可以从打印结果中发现一个规律,在第一次thread2了打印两次thr... 阅读全文
posted @ 2013-02-18 11:20 lyyyuna 阅读(260) 评论(0) 推荐(0) 编辑
摘要: RTT 支持相同优先级,而ucosii 不支持。如果一个线程不调用rt-thread_delay() 来让出调度器,那么它就会一直运行,其它线程永远处于就绪态。而相同优先级的线程,在初始化或创建时还定义了其单次运行的最长的时间片,强迫其让出调度器。这里,使用rt_thread_yield(); 也可... 阅读全文
posted @ 2013-02-18 11:06 lyyyuna 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 静态线程的栈是在编译时确定的,故不能由内核动态的创建或删除。静态线程只能通过detach 来使其脱离内核的调度而做不到 delete。所以静态线程中会像这样定义栈static rt_uint8_t thread1_stack[512];这一点是和ucosii 类似的,但ucosii 没有动态线程。个... 阅读全文
posted @ 2013-02-18 10:54 lyyyuna 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 创建两个动态线程,thread2 运行4s后删除thread1。这里两个都为动态线程,所谓动态线程即在堆中动态创建,删除之后也从RAM中消失。区别于静态线程。由于是动态,所以需开启#define RT_USING_HEAP以下是application.c 的代码#include rt_thread_... 阅读全文
posted @ 2013-02-18 10:42 lyyyuna 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 寒假闲来无事,把RTT官网上的初学者例程中的一部分实现了一遍。以下的这些实验有助于了解一般RTOS的用法。虽然现在RTT的版本比较多,但这些例程的效果都是和版本无关的。配置和编写有关RTT的程序也比较简单,只需改动 rtconifg.h 和 application.c 即可。还有一个好处,所有的实验... 阅读全文
posted @ 2013-02-18 10:33 lyyyuna 阅读(169) 评论(0) 推荐(0) 编辑
摘要: RO段、RW段和ZI段 --Image$$??$$Limit 含义一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解... 阅读全文
posted @ 2013-02-05 10:24 lyyyuna 阅读(811) 评论(0) 推荐(0) 编辑
摘要: RTT的学习集中在应用层,底层的代码会在必要的时候涉及一下。startup是RTT的启动代码,类似于ucos。void rtthread_startup(void){ /* init board */ rt_hw_board_init(); /* show version */ ... 阅读全文
posted @ 2013-02-04 10:04 lyyyuna 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 1.查看系统存在的内核dpkg --get-selections | grep linux2.显示当前的内核uname -a3.升级内核sudo apt-get dist-upgrade4.删除内核带有image的文件是需要删除的,一定要写全版本等字符。其他相关文件会自动删除。sudo apt-ge... 阅读全文
posted @ 2013-01-31 08:21 lyyyuna 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 使用GitHub步骤:1、申请GitHub帐户 xxx ,创建名为new-project的新Repository2、安装Git客户端(Linux)#yum install git git-gui3、 生成密钥对,这样项目可以push到 GitHub上#ssh-keygen -t rsa -C "xx... 阅读全文
posted @ 2013-01-28 16:14 lyyyuna 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。1.修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问... 阅读全文
posted @ 2013-01-28 16:03 lyyyuna 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制--------------------------------- 1)使用ulimit ... 阅读全文
posted @ 2013-01-23 19:32 lyyyuna 阅读(179) 评论(0) 推荐(0) 编辑
摘要: Altium Designer 批量修改属性2010-07-15 11:23:17|分类: 电路设计 |标签: |字号大中小订阅 下面这部分是我转载在网上其它地方查到的内容:http://hi.baidu.com/hellowsn/blog/item/8d93b217969f584621a4e950... 阅读全文
posted @ 2011-07-27 11:16 lyyyuna 阅读(1098) 评论(0) 推荐(0) 编辑
摘要: [a1, a2, ...] = evalin(ws, expression); 在工作空间ws中执行expression命令或表达式,并将执行的结果保存到变量a1、a2、...中。函数的调用方法如下所示:v = evalin('base', 'var'); %把基本工作空间中的变量var的值赋给局部... 阅读全文
posted @ 2011-02-14 16:08 lyyyuna 阅读(247) 评论(0) 推荐(0) 编辑