6668|8

117

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

继续放RealTouch资料,这次精致很多 [复制链接]

先上RealTouch简介

现在的进度,硬件完全READY,就等芯片能够进行批量生产了,芯片使用的是168MHz的STM32F407ZG或STM32F417ZG

realtouch brief.pdf

486.58 KB, 下载次数: 165

RealTouch简介

最新回复

估计RealTouch什么时候发售?  详情 回复 发表于 2012-7-16 11:13
点赞 关注
个人签名RT-Thread:启动下一代RTOS演化

回复
举报

117

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
然后是RealTouch裸板电路板

正面和反面

fore.jpg (204.43 KB, 下载次数: 1)

正面照

正面照

back.jpg (149.88 KB, 下载次数: 1)

反面照

反面照
 
个人签名RT-Thread:启动下一代RTOS演化
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
精美外壳照





7.jpg (112.41 KB, 下载次数: 0)

侧面照

侧面照

9.jpg (115.8 KB, 下载次数: 0)

背面照

背面照

点评

BZ, 硬件资源不开源吗?看你接的屏是SSD驱动的?  详情 回复 发表于 2012-7-9 09:02
 
个人签名RT-Thread:启动下一代RTOS演化
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 ffxz 的帖子

BZ, 硬件资源不开源吗?看你接的屏是SSD驱动的?
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

5
 
开源的,软硬件都开源的,东西都在github上

点评

RealTouch的采用的液晶是多大的?  详情 回复 发表于 2012-7-16 11:09
 
个人签名RT-Thread:启动下一代RTOS演化
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复 5楼 ffxz 的帖子

RealTouch的采用的液晶是多大的?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

7
 
估计RealTouch什么时候发售?
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

8
 
液晶是7寸的,800x480的分辨率,运行新版的RT-Thread/GUI。现在已经可以付款订购了
 
个人签名RT-Thread:启动下一代RTOS演化
 
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

9
 
静态线程的初始化及脱离

实验目的
        快速熟悉静态线程相关接口
        可以使用线程实现简单任务

硬件说明
本实验使用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函数就会将这段申请的内存空间重新释放到内存堆中(如果线程执行完毕,退出时,系统也会自动回收线程控制块和堆栈空间)
1_2_static_thread.jpg (166.16 KB, 下载次数: 6)

实验1_2静态线程的初始化及脱离.pdf (211.46 KB, 下载次数: 15)
 
个人签名RT-Thread:启动下一代RTOS演化
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表