ffxz

个性签名:RT-Thread:启动下一代RTOS演化

    1. 继续放RealTouch资料,这次精致很多 8/6725 嵌入式系统 2012-08-14
      静态线程的初始化及脱离 实验目的         快速熟悉静态线程相关接口         可以使用线程实现简单任务 硬件说明 本实验使用RT-Thread官方的Realtouch开发板作为实验平台。涉及到的硬件主要为         串口3,作为rt_kprintf输出,需要连接JTAG扩展板 具体请参见《Realtouch开发板使用手册》 实验原理及程序结构 实验设计 本实验的主要设计目的是帮助读者快速了解线程相关API,包括静态线程的创建/删除、相关API,为了简化起见,我们将这些API放在同一个线程中调用。请读者注意,本实验本身不具有实际的工程参考价值,只是帮助读者快速了解线程API的用法。 源程序说明 本实验对应1_kernel_thread_static 系统依赖 在rtconfig.h中需要开启         #define RT_USING_CONSOLE 此项必须,本实验使用rt_kpriintf向串口打印按键信息,因此需要开启此项 主程序说明 在applications/application.c中定义了两个线程数据结构以及相应栈 static struct rt_thread thread1; static rt_uint8_t thread1_stack[512]; static struct rt_thread thread2; static rt_uint8_t thread2_stack[512]; application.c中的thread_detach_init()函数中初始化了两个静态线程t1、t2,静态线程的初始化对应于动态线程的创建(create)有一点不同,由于静态线程的栈是用户提供建立的,在编译时分配,内核不会再进行动态分配空间,所以比动态线程多两个参数:线程数据结构以及线程栈的开始地址 result = rt_thread_init(&thread1, "t1", /* 线程名:t1 */                 thread1_entry, RT_NULL,                 /* 线程的入口是thread1_entry,入口参数是RT_NULL*/                 &thread1_stack[0], sizeof(thread1_stack),                 /* 线程栈是thread1_stack */                 6, 10); if (result == RT_EOK) /* 如果返回正确,启动线程1 */         rt_thread_startup(&thread1); result = rt_thread_init(&thread2, "t2", /* 线程名:t2 */                 thread2_entry, RT_NULL,                 /* 线程的入口是thread2_entry,入口参数是RT_NULL*/                 &thread2_stack[0], sizeof(thread2_stack),                 /* 线程栈是thread2_stack */                 5, 10); if (result == RT_EOK) /* 如果返回正确,启动线程2 */         rt_thread_startup(&thread2); 下面的代码是两个线程的入口程序,在thread2的入口程序中将会去脱离thread1,也就是从就绪线程队列中删除thread1 static void thread1_entry(void* parameter) {         rt_uint32_t count = 0;         while (1)         {                 rt_kprintf("thread count: %d\n", count ++);                 rt_thread_delay(RT_TICK_PER_SECOND);         } } static void thread2_entry(void* parameter) {         rt_thread_delay(RT_TICK_PER_SECOND*10);         /*          * 线程2唤醒后直接执行线程1脱离,线程1将从就绪线程队列中删除          */         rt_thread_detach(&thread1);         rt_thread_delay(10); } 编译调试及观察输出信息 编译请参见《RT-Thread配置开发环境指南》完成编译烧录,参考《Realtouch开发板使用手册》完成硬件连接,连接扩展板上的串口和jlink。 运行后可以看到如下信息: \ | / - RT -     Thread Operating System / | \     1.1.0 build Aug 10 2012 2006 - 2012 Copyright by rt-thread team thread count: 0 thread count: 1 thread count: 2 thread count: 3 thread count: 4 thread count: 5 thread count: 6 thread count: 7 thread count: 8 thread count: 9 结果分析 因为thread2拥有更高的优先级,所以在初始化两个线程成功后thread2首先得到执行,得到执行后thread2延时10个系统tick, rt_thread_delay(RT_TICK_PER_SECOND*10); 此时系统调度到thread1执行,thread1执行计数打印,可以看到10次计数打印。当thread2的延时到达时,它将重新获得执行权。Thread2调用rt_thread_detach()函数将thread1脱离线程就绪队列, rt_thread_detach(&thread1); 从而线程1不会再被调度执行。 总结 什么是动态线程?什么是静态线程?两者有什么区别? RT-Thread中支持静态和动态两种定义方式。用线程来举例的话,rt_thread_init对应静态定义方式, rt_thread_create 对应动态定义方式。 使用静态定义方式时,必须先定义静态的线程控制块,并且定义好堆栈空间,然后调用rt_thread_init来完成线程的初始化工作。采用这种方式,线程控制块和堆栈占用的内存会放在RW段,这段内存空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放,而只能使用 rt_thread_detach 函数将该线程控制块从对象管理器中脱离。 使用动态定义方式 rt_thread_create 时, RT-Thread 会动态申请线程控制块和堆栈空间。当不需要使用该线程时,调用rt_thread_delete函数就会将这段申请的内存空间重新释放到内存堆中(如果线程执行完毕,退出时,系统也会自动回收线程控制块和堆栈空间)
    2. RT-Thread的新硬件平台:ART与RealTouch 14/10640 嵌入式系统 2012-08-14
      原帖由 flyword 于 2012-8-10 17:01 发表 [url=https://bbs.eeworld.com.cn/redirect.php?goto=findpost&pid=1359278&ptid=321791][/url] ART 可以预定吗?
      ART应该是这个月月底,到时也会做一些活动。
    3. RT-Thread bsp中就有506的移植,你为啥会去用500的?bsp里506的移植都已经有企业在使用了
    4. 继续放RealTouch资料,这次精致很多 8/6725 嵌入式系统 2012-08-01
      液晶是7寸的,800x480的分辨率,运行新版的RT-Thread/GUI。现在已经可以付款订购了
    5. 富士通FM3官方RT-Thread操作系统下SPI驱动问题 8/6668 DIY/开源硬件专区 2012-08-01
      你是使用SPI接EN28J60吧,这部分代码你可以联系我们获得的,包括SPI bus驱动的代码,enc28j60驱动的代码,已经移植好的RT-Thread + LwIP代码。 RT-Thread针对富士通芯片的网址在这里: http://www.rt-thread.org/fm3 在上面也有针对MB9BF618的例程下载,如果需要MB9BF506的例程,可以联系我们
    6. 继续放RealTouch资料,这次精致很多 8/6725 嵌入式系统 2012-07-09
      开源的,软硬件都开源的,东西都在github上
    7. LPC1788的CAN初始化例程 2/5690 嵌入式系统 2012-06-27
      这些你可以参考NXP提供的例程。
    8. RT-Thread的一个开源产品:串口转以太网 39/23782 嵌入式系统 2012-06-01
      现在都没有了,可以关注我们的其他硬件,例如ART或RealTouch
    9. 继续放RealTouch资料,这次精致很多 8/6725 嵌入式系统 2012-05-24
      精美外壳照
    10. 继续放RealTouch资料,这次精致很多 8/6725 嵌入式系统 2012-05-24
      然后是RealTouch裸板电路板正面和反面
    11. RT-Thread的一个开源产品:串口转以太网 39/23782 嵌入式系统 2012-05-23
      这类小模块其实使用得还挺多的,后续考虑继续完善下去,包括上位机软件、web server配置等
    12. stm32F207的USB(host模式下U盘)驱动设计 3/7037 嵌入式系统 2012-04-29
      你把usb host过来的u盘模拟成一个块设备,然后由DFS去装载它即可。
    13. RealTouch进度图片 7/4359 嵌入式系统 2012-04-20
      原帖由 soso 于 2012-4-20 09:11 发表 很精美   呵呵 :)
      呵呵,精美很谈不上。只是在一步步的做,我们对M4还是寄予了很高的希望,也希望能够把更多的新技术应用在上面。如果可能,后续也可以在这边做做活动。
    14. RealTouch进度图片 7/4359 嵌入式系统 2012-04-19
      原帖由 rwogn 于 2012-4-19 14:50 发表 这个是开发板,还是电路板啊
      带外壳的开发板,有些接口是直接露出来的
    15. 线程间同步方式:事件集 2/3642 嵌入式系统 2012-03-31
      这个是给许继集团培训用的讲义,我找找是否有这段相关的视频,有的话也放出来。:)
    16. RT-Thread的新硬件平台:ART与RealTouch 14/10640 嵌入式系统 2012-03-25
      原帖由 bluehacker 于 2012-3-24 23:19 发表 这个realtouch用的什么片子?stm32吗
      呵呵,那天是您在QQ上和我聊关于邮箱的事情吧。这个目前是STM32F4,当然不排除以后使用其他的M4芯片。M4上我们感觉优势会更大一些,特别当使用了应用模块以后,大家就可以像一般写PC代码一样来些自己的程序了,有自己独立的main函数,函数、全局变量都是自己私有,不用担心与其他的程序冲突。 M3/M4上应用模块的特性我们会先在ART是应用。
    17. 请教RT-thread1.0的mempool部分程序 3/3636 嵌入式系统 2012-03-23
      仔细检查了代码,发现不是mp->block_size的问题,因为mp->block_size只会赋值一次后就不再使用。所以每次依然是按照block_size进行分配,但是当block_size不对齐时,会触发memory fault方面的错误。为了避免这个问题,svn 内核中已经对它进行修复了。谢谢你的反馈。
    18. 好久没来,有些汗颜呐 2/2785 嵌入式系统 2012-03-22
      :congratulate: 谢谢soso,动作迅速啊
    19. 关于LM3S中的上下文切换问题(已解决) 2/3337 嵌入式系统 2012-03-22
      是的,就是这样的。不多load一次就得不到相应的值。
    20. ucos你可以把它想象成一个裸核,如果真的要完成一个多功能的产品,那么需要自己花很多的功夫(移植一些代码、自行编写些代码),或者购买ucos的商业组件。 而RT-Thread,你可以认为它是MCU这个领域的Linux。因为它不仅仅是一个实时核心,也是一个功能丰富的软件平台。甚至能够支持完整的POSIX环境,运行独立的应用程序,这些也是传统RTOS不容易具备的。

最近访客

< 1/2 >

统计信息

已有315人来访过

  • 芯积分:--
  • 好友:--
  • 主题:24
  • 回复:93

留言

你需要登录后才可以留言 登录 | 注册


shilaike 2011-4-19
哥子。你在这方面有什么资料没有呢??能给小弟一些吗、??谢谢。。。
我的QQ:1005450581
查看全部