rtt win32 移植

51 views
Skip to first unread message

prife

unread,
Sep 5, 2012, 12:37:17 PM9/5/12
to rt-thread-cnusers
在yygg_you网友所做 RT-THREAD for Win32 移植的基础上继续开发

环境: windows 7 
编译器: vs2005
rtt版本:当前svn

目前的进展包括:
1. rtt源码为 当前SVN中代码:1.1.x,并且源码结构跟RTT风格一致
2.添加了finsh组件,为了支持finsh控制台按键,启动一个windows 线程,并在此线程中调用_getch,来模拟usart中断。
3.dfs 支持
   elmfat 组件成功运行
   uffs 组件成功运行 

源码参见附件
其中patch文件有tortoisesvn生成。
1). finsh.patch 用于 trunk\components\finsh
2). kservice.c  用于trunk\src
3). x86.7z 解压缩之后放在 trunk\libcpu 目录下 (注意解压时请选择解压到当前文件夹)
4)vcbsp.7z 为bsp工程,目前上不支持scons编译,内部的vs工程可以直接打开(vs2005及其更高版本)。 解压所之后放在trunk\bsp\目录下


效果图:见附件。

--
把有限的时间投入到无限的学习中去
finsh.patch
kservice.c.patch
vcbsp.7z
x86.7z
rttonvs.png

prife

unread,
Sep 5, 2012, 12:40:19 PM9/5/12
to rt-thread-cnusers
忘记说明了
上面的示例工程中

模拟了一块 SD卡, 存放fatfs文件系统,做  / 分区

模拟了16M的nand flash(page size = 2048 + 64(OOB),  1block = 64 pages, 共 128个blocks),原型为 K9F1G08
     挂载 uffs分区。 挂载路径为  /nand。

尤兴旺

unread,
Sep 5, 2012, 7:16:01 PM9/5/12
to rt-threa...@googlegroups.com
哎呀,我居然能为RTT做了那么点贡献啊 ,哈哈!!!

--
好记性不如烂笔头

bernard

unread,
Sep 5, 2012, 7:23:16 PM9/5/12
to rt-threa...@googlegroups.com
感谢提供初始的移植。

后续会提交到开发主干上去,并完善lwIP移植,Host socket支持,Host文件系统,GUI移植等事项。同时在scons中也加入VC++工程的自动生成脚本。争取在1.1.0正式版中发布出来。

Grissiom

unread,
Sep 5, 2012, 8:29:27 PM9/5/12
to rt-threa...@googlegroups.com
嗯,是不是可以利用 x86/posix 完成在 Linux 下的移植?

cpuport 很强大的样子…… 不过线程创建竟然是在 stack_init 里完成的,感觉不爽……

2012/9/6 prife <gop...@gmail.com>



--
Cheers,
Grissiom

bernard

unread,
Sep 5, 2012, 8:31:09 PM9/5/12
to rt-threa...@googlegroups.com
应该是的,Linux应该也可以支持。

后续就是GUI驱动如何进行移植了,如果使用SDL,还可以把sound的驱动也移植进来。

Grissiom

unread,
Sep 5, 2012, 8:35:58 PM9/5/12
to rt-threa...@googlegroups.com
2012/9/6 bernard <bernar...@gmail.com>

应该是的,Linux应该也可以支持。

后续就是GUI驱动如何进行移植了,如果使用SDL,还可以把sound的驱动也移植进来。


嗯,用 SDL 应该是比较好的。因为东西是现成的,而且不用处理各种底层库,又可以简化很多……



--
Cheers,
Grissiom

尤兴旺

unread,
Sep 5, 2012, 8:42:21 PM9/5/12
to rt-threa...@googlegroups.com

我后来在论坛发过一个帖子,采用的mingw编译,已经可以支持sdl了,rtgui的demo都出来了。最近工作比较忙,一直没有时间去继续搞。有兴趣的可以去论坛搜一下

prife

unread,
Sep 5, 2012, 10:08:35 PM9/5/12
to rt-threa...@googlegroups.com
to Grissiom chaos....@gmail.com 
嗯,是不是可以利用 x86/posix 完成在 Linux 下的移植?

cpuport 很强大的样子…… 不过线程创建竟然是在 stack_init 里完成的,感觉不爽……


1.  x86/posix, 已经在linux编译通过了,倒也跑起来了,但是bug太多,遂放弃之。如果要在linux下用,还需要对 x86/posix做大量的修改。
2. 因为每一个rtt线程都对应一个win32线程,所以放在stack_init里做,这样对 RTT kernel的代码代码改动极少。
 
to 尤兴旺 wangwa...@gmail.com
哎呀,我居然能为RTT做了那么点贡献啊 ,哈哈!!!

目前这个 x68/win32/cpu_port.c   还有一个很严重的bug:

bug描述:
最高优先级的线程不能退出。因为任意时刻,每一个RTT线程对应一个 win32 的线程,所以任意时刻只有RTT的最高优先级的线程对应的win32 线程是 ready的,其他线程对应的win32线程都是 suspend的

这样的后果就是,如果RTT中最高优先级的线程的线程entry函数执行完毕后退出,那么其他线程都是suspend的,这整个程序再也办法执行了。

而在真实的板子上是这样的:每个线程函数执行完毕后, 硬件会自动从其栈返回,并去执行rt_thread_exit, 这个函数会切换到其他ready线程去执行。

但是在VS上,我不会。。。



2012/9/6 prife <gop...@gmail.com>
在yygg_you网友所做 RT-THREAD for Win32 移植的基础上继续开发

环境: windows 7 
编译器: vs2005
rtt版本:当前svn

目前的进展包括:
1. rtt源码为 当前SVN中代码:1.1.x,并且源码结构跟RTT风格一致
2.添加了finsh组件,为了支持finsh控制台按键,启动一个windows 线程,并在此线程中调用_getch,来模拟usart中断。
3.dfs 支持
   elmfat 组件成功运行
   uffs 组件成功运行 

源码参见附件
其中patch文件有tortoisesvn生成。
1). finsh.patch 用于 trunk\components\finsh
2). kservice.c  用于trunk\src
3). x86.7z 解压缩之后放在 trunk\libcpu 目录下 (注意解压时请选择解压到当前文件夹)
4)vcbsp.7z 为bsp工程,目前上不支持scons编译,内部的vs工程可以直接打开(vs2005及其更高版本)。 解压所之后放在trunk\bsp\目录下


效果图:见附件。

--
把有限的时间投入到无限的学习中去



--
Cheers,
Grissiom



--
把有限的时间投入到无限的学习中去

bernard

unread,
Sep 5, 2012, 10:12:21 PM9/5/12
to rt-threa...@googlegroups.com
idle线程也没有了吗?

prife

unread,
Sep 5, 2012, 10:23:07 PM9/5/12
to rt-threa...@googlegroups.com
idle线程的优先级很低啊。

如果系统有一个线程,其entry函数为

void rt_init_thread_entry(void* parameter)
{
#ifdef RT_USING_COMPONENTS_INIT
    /* initialization RT-Thread Components */
    rt_components_init();
#endif

    rt_platform_init();

    /* Filesystem Initialization */
#ifdef RT_USING_DFS
    {
#ifdef RT_USING_DFS_ELMFAT
        /* mount sd card fat partition 1 as root directory */
        if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
        {
            rt_kprintf("fatfs initialized!\n");
        }
        else
            rt_kprintf("fatfs initialzation failed!\n");
#endif

#ifdef RT_USING_DFS_ELMFAT
        /* mount sd card fat partition 1 as root directory */
        if (dfs_mount("nand0", "/nand", "uffs", 0, 0) == 0)
        {
            rt_kprintf("uffs initialized!\n");
        }
        else
            rt_kprintf("uffs initialzation failed!\n");
#endif

    }
#endif

    /* do some thing here. */
while(1)
{
rt_thread_delay(5000);
}
}

上面的红色字体是必须的。 如果没有上面的红色字体, 由于init线程优先级最高,它对应的win32 线程是ready的,那么这个线程函数执行完毕以后, win32线程直接就销毁了, 没办法去执行 rt_thread_exit函数,也就无法切换到idle线程去执行。

所以整个程序就会死掉。

而在真实的板子上可以切换到其他线程上,是因为rt_thread_exit 这函数的功劳,但是在win32 上,线程堆栈实际并没有用处。。所以没办法在线程函数退出后去执行 rt_thread_exit 函数,也就没办法切换到idle线程

/* init thread list */
rt_list_init(&(thread->tlist));

thread->entry = (void *)entry;
thread->parameter = parameter;

/* stack init */
thread->stack_addr = stack_start;
thread->stack_size = stack_size;

/* init thread stack */
rt_memset(thread->stack_addr, '#', thread->stack_size);
thread->sp = (void *)rt_hw_stack_init(thread->entry, thread->parameter,
(void *) ((char *)thread->stack_addr + thread->stack_size - 4),
(void *)rt_thread_exit);

/* priority init */
RT_ASSERT(priority < RT_THREAD_PRIORITY_MAX);
thread->init_priority = priority;
thread->current_priority = priority;

/* tick init */
thread->init_tick = tick;
thread->remaining_tick = tick;

/* error and flags */
thread->error = RT_EOK;
thread->stat  = RT_THREAD_INIT;

/* initialize cleanup function and user data */
thread->cleanup = 0;
thread->user_data = 0;

/* init thread timer */
rt_timer_init(&(thread->thread_timer),
thread->name,
rt_thread_timeout,
thread,
0,
RT_TIMER_FLAG_ONE_SHOT);

return RT_EOK;
--
把有限的时间投入到无限的学习中去

ws

unread,
Sep 5, 2012, 10:23:15 PM9/5/12
to rt-threa...@googlegroups.com
挺好,这样以后可以直接在windows上开发rtt的应用层程序了,这个好了再在目标板上做,很棒赞一个!我们目前Mx的裸机程序的做法,是在windows上做了一个BSP的模拟,LCD的模拟,然后应用层直接在windows上开发,开发效率还是高很多的。

winfeng_hs

unread,
Sep 5, 2012, 11:42:29 PM9/5/12
to rt-threa...@googlegroups.com

prife

unread,
Sep 5, 2012, 11:52:13 PM9/5/12
to rt-threa...@googlegroups.com

winfeng_hs

unread,
Sep 6, 2012, 12:11:54 AM9/6/12
to rt-threa...@googlegroups.com
没看明白,你给的这两个连接找不到答案!~我只是用做客户端!RPC文件夹下的代码需要添加吗?

bernard

unread,
Sep 6, 2012, 12:15:51 AM9/6/12
to rt-threa...@googlegroups.com
自己不用scons,不看SConscript文件的?

winfeng_hs

unread,
Sep 6, 2012, 12:18:12 AM9/6/12
to rt-threa...@googlegroups.com
我用keil 环境,好吧!我查查SConscript文件

winfeng_hs

unread,
Sep 6, 2012, 12:30:29 AM9/6/12
to rt-threa...@googlegroups.com
好吧,我找到了,在DFS下的SConsript中

Deli Geng (David)

unread,
Sep 6, 2012, 8:34:28 PM9/6/12
to rt-threa...@googlegroups.com
�ܹ���Win32����RTT���Ǽ������ģ�����һ�������ĿǰRTGUI�µ� win32��ʲô
��������ڻ�����RTGUI��win32��ģ�⣬Ӳ���ӿڵ������������

On 2012/9/6 10:23, ws wrote:
> ͦ�ã������Ժ����ֱ����windows�Ͽ���rtt��Ӧ�ò�����ˣ������������Ŀ����������ܰ���һ��������ĿǰMx�������������������windows������һ��BSP��ģ�⣬LCD��ģ�⣬Ȼ��Ӧ�ò�ֱ����windows�Ͽ���������Ч�ʻ��Ǹߺܶ�ġ�
> �� 2012-09-06 10:08:35��prife <gop...@gmail.com> ���
> to Grissiom chaos....@gmail.com
>
> �ţ��Dz��ǿ������� x86/posix ����� Linux �µ���ֲ��
>
>
> cpuport ��ǿ������ӡ��� �����̴߳�����Ȼ���� stack_init ����ɵģ��о���ˬ����
>
>
>
>
> 1. x86/posix�� �Ѿ���linux����ͨ���ˣ���Ҳ�������ˣ�����bug̫�࣬�����֮�����Ҫ��linux���ã�����Ҫ�� x86/posix���������޸ġ�
> 2. ��Ϊÿһ��rtt�̶߳���Ӧһ��win32�̣߳����Է���stack_init����������� RTT kernel�Ĵ������Ķ����١�
>
> to ������ wangwa...@gmail.com
> ��ѽ���Ҿ�Ȼ��ΪRTT������ô�㹱�װ� ������������
>
>
> Ŀǰ��� x68/win32/cpu_port.c ����һ�������ص�bug��
>
>
> bug������
> ������ȼ����̲߳����˳�����Ϊ����ʱ�̣�ÿһ��RTT�̶߳�Ӧһ�� win32 ���̣߳���������ʱ��ֻ��RTT��������ȼ����̶߳�Ӧ��win32 �߳��� ready�ģ������̶߳�Ӧ��win32�̶߳��� suspend��
>
>
> ����ĺ����ǣ����RTT��������ȼ����̵߳��߳�entry����ִ����Ϻ��˳�����ô�����̶߳���suspend�ģ������������Ҳ�취ִ���ˡ�
>
>
> ������ʵ�İ�����������ģ�ÿ���̺߳���ִ����Ϻ� Ӳ�����Զ�����ջ���أ���ȥִ��rt_thread_exit, ���������л�������ready�߳�ȥִ�С�
>
>
> ������VS�ϣ��Ҳ��ᡣ����
>
>
>
>
>
>
> 2012/9/6 prife <gop...@gmail.com>
> ��yygg_you�������� RT-THREAD for Win32 ��ֲ�Ļ��ϼ���
>
>
> ������ windows 7
> �������� vs2005
> rtt�汾����ǰsvn
>
> Ŀǰ�Ľ�չ������
> 1. rttԴ��Ϊ ��ǰSVN�д��룺1.1.x������Դ��ṹ��RTT���һ��
> 2.�����finsh�����Ϊ��֧��finsh����̨��������һ��windows �̣߳����ڴ��߳��е���_getch����ģ��usart�жϡ�
> 3.dfs ֧��
> elmfat ����ɹ�����
> uffs ����ɹ�����
>
> Դ��μ��
> ����patch�ļ���tortoisesvn��ɡ�
> 1). finsh.patch ���� trunk\components\finsh
> 2). kservice.c ����trunk\src
> 3). x86.7z ��ѹ��֮����� trunk\libcpu Ŀ¼�� (ע���ѹʱ��ѡ���ѹ����ǰ�ļ��У�
> 4)vcbsp.7z Ϊbsp���̣�Ŀǰ�ϲ�֧��scons���룬�ڲ���vs���̿���ֱ�Ӵ򿪣�vs2005�����߰汾���� ��ѹ��֮�����trunk\bsp\Ŀ¼��
>
>
>
>
> Ч��ͼ�������
>
>
> --
> �����޵�ʱ��Ͷ�뵽���޵�ѧϰ��ȥ
>
>
>
>
>
>
> --
> Cheers,
> Grissiom
>
>
>
>
>
>
> --
> �����޵�ʱ��Ͷ�뵽���޵�ѧϰ��ȥ

prife

unread,
Sep 8, 2012, 6:56:27 AM9/8/12
to rt-threa...@googlegroups.com
在 2012年9月7日 上午8:34,Deli Geng (David) <d.g...@ediecs.com>写道:
能够在Win32上跑RTT很是激动人心,想问一下这个跟目前RTGUI下的 win32有什么 区别?我现在基本上用RTGUI的win32跑模拟,硬件接口单独虚拟出来。

这个版本是完整版本的RTT, RTGUI上的RTT是不完整的吧

On 2012/9/6 10:23, ws wrote:
挺好,这样以后可以直接在windows上开发rtt的应用层程序了,这个好了再在目标板上做,很棒赞一个!我们目前Mx的裸机程序的做法,是在windows上做了一个BSP的模拟,LCD的模拟,然后应用层直接在windows上开发,开发效率还是高很多的。
1). finsh.patch 用于 trunk\components\finsh

2). kservice.c  用于trunk\src
3). x86.7z 解压缩之后放在 trunk\libcpu 目录下 (注意解压时请选择解压到当前文件夹)
4)vcbsp.7z 为bsp工程,目前上不支持scons编译,内部的vs工程可以直接打开(vs2005及其更高版本)。 解压所之后放在trunk\bsp\目录下




效果图:见附件。


--
把有限的时间投入到无限的学习中去






--
Cheers,
Grissiom






--
把有限的时间投入到无限的学习中去




--
把有限的时间投入到无限的学习中去

Wang WolfLouis

unread,
Sep 8, 2012, 11:36:20 PM9/8/12
to rt-threa...@googlegroups.com
http://www.rt-thread.org/phpBB3/viewtopic.php?f=2&t=1538

这个链接打不开啊,

在 12-9-8,prife<gop...@gmail.com> 写道:


> 在 2012年9月7日 上午8:34,Deli Geng (David) <d.g...@ediecs.com>写道:
>

>> 能够在Win32上跑RTT很是激动人心,**想问一下这个跟目前RTGUI下的 win32有什么 区别?我现在基本上用RTGUI的win32跑模拟,*
>> *硬件接口单独虚拟出来。


>>
>> 这个版本是完整版本的RTT, RTGUI上的RTT是不完整的吧
>
>>
>> On 2012/9/6 10:23, ws wrote:
>>

>>> 挺好,**这样以后可以直接在windows上开发rtt的应用层程序了,**这个好了再在目标板上做,很棒赞一个!**我们目前Mx的裸机程序的做法,*
>>> *是在windows上做了一个BSP的模拟,LCD的模拟,**然后应用层直接在windows上开发,开发效率还是高很多的。


>>> 在 2012-09-06 10:08:35,prife <gop...@gmail.com> 写道:
>>> to Grissiom chaos....@gmail.com
>>>
>>> 嗯,是不是可以利用 x86/posix 完成在 Linux 下的移植?
>>>
>>>
>>> cpuport 很强大的样子…… 不过线程创建竟然是在 stack_init 里完成的,感觉不爽……
>>>
>>>
>>>
>>>

>>> 1. x86/posix, 已经在linux编译通过了,倒也跑起来了,但是bug太多,**遂放弃之。如果要在linux下用,还需要对
>>> x86/posix做大量的修改。
>>> 2. 因为每一个rtt线程都对应一个win32线程,**所以放在stack_init里做,这样对 RTT kernel的代码代码改动极少。


>>> to 尤兴旺 wangwa...@gmail.com
>>> 哎呀,我居然能为RTT做了那么点贡献啊 ,哈哈!!!
>>>
>>>
>>> 目前这个 x68/win32/cpu_port.c 还有一个很严重的bug:
>>>
>>>
>>> bug描述:

>>> 最高优先级的线程不能退出。因为任意时刻,**每一个RTT线程对应一个 win32
>>> 的线程,**所以任意时刻只有RTT的最高优先级的线程对应的win32
>>> 线程是 ready的,其他线程对应的win32线程都是 suspend的
>>>
>>>
>>> 这样的后果就是,**如果RTT中最高优先级的线程的线程entry函数执行完毕后退**出,那么其他线程都是suspend的,**


>>> 这整个程序再也办法执行了。
>>>
>>>
>>> 而在真实的板子上是这样的:每个线程函数执行完毕后, 硬件会自动从其栈返回,并去执行rt_thread_exit,
>>> 这个函数会切换到其他ready线程去执行。
>>>
>>>
>>> 但是在VS上,我不会。。。
>>>
>>>
>>>
>>>
>>>
>>>
>>> 2012/9/6 prife <gop...@gmail.com>
>>> 在yygg_you网友所做 RT-THREAD for Win32 移植的基础上继续开发
>>>
>>>
>>> 环境: windows 7
>>> 编译器: vs2005
>>> rtt版本:当前svn
>>>
>>> 目前的进展包括:
>>> 1. rtt源码为 当前SVN中代码:1.1.x,并且源码结构跟RTT风格一致

>>> 2.添加了finsh组件,为了支持finsh控制台按键,**启动一个windows 线程,并在此线程中调用_getch,来模拟usart中断。


>>> 3.dfs 支持
>>> elmfat 组件成功运行
>>> uffs 组件成功运行
>>>
>>> 源码参见附件
>>> 其中patch文件有tortoisesvn生成。
>>> 1). finsh.patch 用于 trunk\components\finsh
>>> 2). kservice.c 用于trunk\src
>>> 3). x86.7z 解压缩之后放在 trunk\libcpu 目录下 (注意解压时请选择解压到当前文件夹)

>>> 4)vcbsp.7z 为bsp工程,目前上不支持scons编译,**内部的vs工程可以直接打开(vs2005及其更高版本)。

Deli Geng (David)

unread,
Sep 9, 2012, 8:27:19 PM9/9/12
to rt-threa...@googlegroups.com
RTGUI�µ�win32�������ں�API��GUI��û�����⣬��˵������ϵͳ���� ����Щģ
�飿����ʾ��


On 2012/9/8 18:56, prife wrote:
> �� 2012��9��7�� ����8:34��Deli Geng (David) <d.g...@ediecs.com>���
>
>> �ܹ���Win32����RTT���Ǽ������ģ�**����һ�������ĿǰRTGUI�µ� win32��ʲô ��������ڻ�����RTGUI��win32��ģ�⣬*
>> *Ӳ���ӿڵ������������
>>
>> ����汾������汾��RTT�� RTGUI�ϵ�RTT�Dz�����İ�
>

bernard

unread,
Sep 9, 2012, 8:51:48 PM9/9/12
to rt-threa...@googlegroups.com

我今天中午找时间整理下这个分支。另外,这种移植方式是否不能采用sdl了?

在 2012-9-10 上午8:27,"Deli Geng (David)" <d.g...@ediecs.com>写道:
RTGUI下的win32至少跑内核API和GUI都没有问题,你说的完整系统还包 含哪些模
块?请明示。



On 2012/9/8 18:56, prife wrote:

prife

unread,
Sep 9, 2012, 9:25:13 PM9/9/12
to rt-threa...@googlegroups.com
可以啊,楼主提供了两个版本,我是在第一个版本上开发的。

下面是楼主的第二个版本
--
把有限的时间投入到无限的学习中去
Reply all
Reply to author
Forward
0 new messages