搜索
bottom↓
回复: 41

RT-Thread/SAM7S、LPC2148移植

[复制链接]

出0入0汤圆

发表于 2009-2-20 14:21:10 | 显示全部楼层 |阅读模式
发了后才发觉这里是ARM的地盘,所以STM32还是换个地方吧。
----
下面的帖子里包含了RT-Thread/AT91SAM7S和RT-Thread/LPC2148的移植。AT91SAM7S经过了实际的板子验证,实际上从simulator到真实的板子验证也没修改什么,所以个人估计LPC2148能够运行成功的概率会很高。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2009-2-20 14:31:19 | 显示全部楼层
这里这个是RT-Thread for AT91SAM7S64的移植
点击此处下载 ourdev_421020.zip(文件大小:95K) (原文件名:rt-thread-0.2.4sam7s.zip)

因为是小内存设备,线程只支持32个优先级,不支持动态创建线程(没把动态内存管理模块加进去)。能够在RealView MDK中用simulator执行,也能在AT91SAM7S64板子上运行。包含基本的内核移植,finsh shell移植。

注:finsh shell是一套面向底层的shell系统,前身是一套可解析执行类C语言代码的脚本解释器,finsh是它的剪裁版本,只支持C语言表达式。通过finsh可以直接在命令上调用内核中的函数及访问全局变量。

出0入0汤圆

 楼主| 发表于 2009-2-20 14:35:23 | 显示全部楼层
这里这个是RT-Thread for LPC2148的移植

点击此处下载 ourdev_421023.zip(文件大小:93K) (原文件名:rt-thread-0.2.4lpc2148.zip)

这个线程优先级最大依然是32个,不支持动态创建线程,不支持动态创建内核对象。我只试过在RealView MDK中进行simulator运行,没LPC2148的板子。同样也包含finsh shell的移植。

出0入0汤圆

 楼主| 发表于 2009-2-20 14:41:47 | 显示全部楼层
RT-Thread for STM32的移植
点击此处下载 ourdev_421024.zip(文件大小:233K) (原文件名:rt-thread-0.2.4stm32.zip)

STM32移植的说明
点击此处下载 ourdev_421025.pdf(文件大小:160K) (原文件名:D_RT-Thread STM32 Notes.pdf)

只包含基本的内核移植,因为是新的架构,所以finsh的移植暂时不做考虑,等能够正常在板子上运行后在考虑吧。

出0入0汤圆

 楼主| 发表于 2009-2-20 14:53:26 | 显示全部楼层
另外,RT-Thread RTOS是一个开源的实时操作系统,其开发方式也是采用开源方式进行,它的目标也订得比较高,呵呵!

RT-Thread::启动下一代RTOS演化

所以开发的方向也可以有很多的,在这里大吼一声,有对GUI感兴趣的么?RT-Thread GUI这块是我牵头的,不过现在基本上是光杆一个,而且有些东西,我本人确实不怎么擅长,例如如何快速的做位图变换、美轮美奂的美工……而且还有一堆控件

RT-Thread RTGUI状态:
基本的控件,支持多窗口,面板模式,简单的拼音输入法
面板还不能支持全屏模式

截图就周末再上。

出0入0汤圆

 楼主| 发表于 2009-2-20 20:55:42 | 显示全部楼层
RTGUI的屏幕截图,截图是在PC上仿真运行的,已经无缝移植到s3c2410上了

RTGUI的基本控件

(原文件名:rtgui_widget.jpg)

RTGUI的文件浏览器

(原文件名:rtgui_fm.jpg)

RTGUI的视频播放演示

(原文件名:rtgui_avi.jpg)

出0入31汤圆

发表于 2009-2-20 21:13:02 | 显示全部楼层
咋没人顶呢,我来凑个热闹,希望把gui做好
0.3版本什么时候发布啊?

出0入0汤圆

发表于 2009-2-20 21:27:12 | 显示全部楼层
年前关注过...
从汇编第一条指令开始慢慢走来...
目前卡在CPU的各种模式中....
没弄懂,所就也不能继续下一步,上不了系统

(使用LPC2148)
有空试试.

出0入0汤圆

 楼主| 发表于 2009-2-20 21:39:40 | 显示全部楼层
0.3需要测试,特别的两点,一个是文件系统的大规模测试;一个是GUI的实用化。目前0.3的文档倒是准备得差不多了。

GUI要做好这个确实需要的,而且也比较迫切。苦于我手头没有一块带LCD的开发板,只能模拟着开发,下一步还得把我一个zaurus PDA给移植了,这样才有真实的LCD,这样才能做到实际的优化。呵呵,最好的方法无疑是加入到RT-Thread的开发中,这样发布速度才能快。

出0入0汤圆

 楼主| 发表于 2009-2-20 21:43:48 | 显示全部楼层
回 aozima 残剑饮血
可以试试上面的LPC2148的移植,有什么问题也可以提出来,这个毕竟是我刚做的移植,data sheet相关的部分还是看了些。目前也在做LPC2478的移植,跑起来没什么问题了,但还需要和小组内另外一位开发成员沟通下,他才有真实的LPC2478开发板(他也提供了一个针对gcc的RT-Thread移植)。

争取这个周末把RT-Thread放到Google的svn代码仓库里,这样大家以后更新就方便多了。

出0入0汤圆

 楼主| 发表于 2009-2-23 17:37:19 | 显示全部楼层
请教下大家,一般使用RealView的时候,一些标准的libc库是否一般都使用RealView自己带的?而不是自己去实现

如果是这样的话,例如malloc这些,如何保证库里的代码不会存在多任务互斥的问题。

出0入0汤圆

发表于 2009-2-23 20:43:19 | 显示全部楼层
很好,做个标记!

出0入0汤圆

发表于 2009-2-23 21:16:30 | 显示全部楼层
有没有IAR版的???用不惯KEIL

出0入0汤圆

 楼主| 发表于 2009-2-23 21:55:18 | 显示全部楼层
IAR的simulator不太好用,不能仿真外设,所以没用。可以自己做IAR的移植,在网站上有详细完整的移植文档,我们自己做只能做到AT91SAM7S/AT91SAM7X或s3c2440的IAR移植。

出0入0汤圆

 楼主| 发表于 2009-2-23 22:05:52 | 显示全部楼层
关于RTGUI,从上面的截图来看,我想RTGUI基本上不会弱于ucgui吧,但现在也只能说是一个半成品。体系结构上比较倾向于LGUI(一些设计思想受它影响,感谢LGUI原作者),而不类似于miniGUI,当然RTGUI不是简单的雷同于LGUI,还是做出了自己的创新。

功能上目前也离LGUI很近了,不过通常我有个不放出半成品的习惯,所以拖了这么久也没释放出来。今天晚上好些,调的zaurus PDA(Marvell PXA270,640x480的分辨率)终于有起色,能够在Linux Kernel里把RT-Thread给load进去,MMU也重新配置了。

出0入0汤圆

发表于 2009-2-23 22:34:08 | 显示全部楼层
请问下楼主:我正在用LPC2148试
如何测试系统已在运行? 用超级终端吗?

这样算是系统运行正常么?
感觉不错
但我现在不知道从哪里下手移植一个最简单的OS
什么也不要,闪个LED即可...
已加入www.rt-thread.org 的BBS
慢慢看文档


(原文件名:RT.jpg)

出0入0汤圆

 楼主| 发表于 2009-2-24 12:07:14 | 显示全部楼层
To aozima 残剑饮血
你的输出是从超级终端里输出的吗?如果是,恭喜你,你已经在板子上正常运行了。

输出的包含两个线程,
线程1只在串口输出一个计数(0 - 100)
线程2只在串口输出Thread2 count: xx 的计数

应该也可以在超级终端里输入吧?

finsh>>是finsh shell的提示符,你可以输入list_thread(),然后回车,可以显示出系统中所有的线程,finsh里具体的命令可以参看网站上的FinSH文档。对于RT-Thread的入门,首先需要搞清楚里面的内核对象,然后是线程管理,其次是线程间同步与通信。这部分可以说是RT-Thread里最重要的部分。finsh的代码对于初学者来说千万别看,除非你是计算机专业出身,里面涉及到编译原理的大半知识,从词法分析、文法分析,到语法树构造,到最后的生成虚拟机指令,启动虚拟机运行。。。它已经超出了RTOS的范畴,难度也要高于操作系统。

至于说移植OS,点亮LED
或许可以从RT-Thread的GCC或IAR移植开始,LPC2148因为我没有开发板,所以无法做其他编译器的移植。

出0入0汤圆

发表于 2009-2-24 12:59:14 | 显示全部楼层
请教下大家,一般使用RealView的时候,一些标准的libc库是否一般都使用RealView自己带的?而不是自己去实现

如果是这样的话,例如malloc这些,如何保证库里的代码不会存在多任务互斥的问题。
__________________________


使用完整的c库自己也要实现不少东西。系统内核用的应该不多,我觉得自己去实现可能更简单。
malloc的问题我觉得除非realview明确说明了,否则应该不能保证。
ads带有一个Compiler guide,realview应该也有类似的东西。这上面可能有答案。

顺便帮顶。

出0入0汤圆

 楼主| 发表于 2009-2-24 15:14:00 | 显示全部楼层
谢谢楼上

果真,realview mdk c library中,如果要保持malloc、free线程安全,需要实现
_mutex_initialize()
_mutex_acquire()
_mutex_release()
三个函数,正在考虑是否需要这么做,这么做的话需要使用一个静态的mutex数组。

出0入0汤圆

发表于 2009-2-24 19:50:21 | 显示全部楼层
问一下,RT-Thread是国内的人写的还是国外的人写的,怎么连注解都是用英文写的,要出个中文的注解就好了

出0入0汤圆

发表于 2009-2-24 19:51:15 | 显示全部楼层
在STM32上运行了一下,感觉还可以。不过怎么没发现文件系统和GUI呢?啥时候才能看到完整的程序包?

出0入0汤圆

 楼主| 发表于 2009-2-25 08:45:23 | 显示全部楼层
STM32也运行成功了?那就好,STM32的移植也终于可以运行

RT-Thread是国内的一个小型团队写的,代码中用英文是其中规则的一部分,所以都是英文。文件系统和GUI现在手头没开发板,还没办法对其中的一些细节进行验证。

出0入168汤圆

发表于 2009-2-25 08:52:15 | 显示全部楼层
有基于它的TCP-IP吗?

出0入0汤圆

 楼主| 发表于 2009-2-25 08:57:58 | 显示全部楼层
有,AT91RM9200的GCC版本中移植了LwIP,AT91SAM7X256正在移植,不过花在上面的时间不多,上面说的RealView MDK C库的问题就是移植中的问题。(AT91SAM7X256 GCC的移植可以很快的加上TCP/IP,现在是打算做RealView MDK的)

出0入0汤圆

发表于 2009-2-25 14:03:26 | 显示全部楼层
如果不介意的话,我这倒是有一块闲置的STM32开发板。因为是较早的版本,所以不太美观。带320*240TFT液晶,带触摸屏,有SD卡接口。有以太网接口,不过没有焊接,因为没器件。如果不嫌弃的话我可以赠给你做实验
我QQ:280960559

出0入0汤圆

发表于 2009-2-25 14:07:58 | 显示全部楼层
也算是为国内的团队做点贡献吧。以前一直玩uCGUI,用起来觉得很不爽。想看看国内的高手们写的GUI会不会有提高

出0入0汤圆

 楼主| 发表于 2009-2-25 16:01:06 | 显示全部楼层
非常感谢PZPDY的开发板,有这样的一块开发板,RT-Thread 0.3.0也会早日和大家面世,相关进度我也会在这里向大家公布。

出0入0汤圆

 楼主| 发表于 2009-2-27 15:36:23 | 显示全部楼层
RT-Thread/LPC2148更新

点击此处下载 ourdev_422472.zip(文件大小:96K) (原文件名:rt-thread-0.2.4-lpc2148.zip)

更新如下
- 使能RT-Thread的小内存管理系统,rt_malloc/free/calloc函数可用。
- finsh更新到0.5版本,支持FINSH_FUNCTION_EXPORT,FINSH_VAR_EXPORT输出符号到finsh shell中
例如:
FINSH_FUNCTION_EXPORT(rt_kprintf, format output on shell)
* 在调用系统list()函数时,前面输出宏的后半部分会作为描述信息打印出来。

将把rt_kprintf函数调用输出到finsh中,可以在finsh shell中采用如下类似C语言中调用函数的方式调用:
rt_kprintf("10 is %d\n", 10)

LPC2148采用RealView MDK默认编译大小如下:
Program Size: Code=47184 RO-data=1372 RW-data=752 ZI-data=6632
LPC 2148可用资源:Flash 512K,SRAM 32K

出0入0汤圆

发表于 2009-2-27 16:05:51 | 显示全部楼层
原封不动  :Program Size: Code=44576 RO-data=1372 RW-data=752 ZI-data=6632  
选择O3测试:Program Size: Code=24996 RO-data=1372 RW-data=492 ZI-data=6636  

去掉FinSH shell:Program Size: Code=16040 RO-data=1112 RW-data=412 ZI-data=3140  
再选择O3       :Program Size: Code=10732 RO-data=1112 RW-data=152 ZI-data=3144  

不算大,其实上了OS一般也不会在乎这点资源了...
期待www.rt-thread.org 早日得到性产部的鸟用没有的备案

出0入0汤圆

 楼主| 发表于 2009-2-27 16:14:35 | 显示全部楼层
你怎么去掉FinSH Shell的?

我去掉的方法:
把finsh group删除掉,rtconfig.h中
RT_USING_FINSH
FINSH_USING_SYMTAB
FINSH_USING_DESCRIPTION
这几个宏定义都注释掉

然后O3编译(下同):
Program Size: Code=8428 RO-data=324 RW-data=116 ZI-data=1860  

如果在rtconfig.h中再注释掉(取消掉动态内存和静态内存池支持)
RT_USING_HEAP,RT_USING_MEMPOOL
Program Size: Code=6776 RO-data=324 RW-data=84 ZI-data=1812  

这估计是极限了,如果采用Thumb的话还可以更小一些。

出0入0汤圆

 楼主| 发表于 2009-2-27 16:44:52 | 显示全部楼层
不纠这些技术指标细节了,既然用了RTOS,对memory估计不是太care。

其实RT-Thread不小的,看看里面实现的能够支持大内存的SLAB内存管理器就知道了,即使让SLAB去管理上G的内存空间其分配和释放时间都非常倾向于实时化。如果说觉得RT-Thread小、简单,那只能说RT-Thread的代码模块化规划得好,模块与模块之间的耦合性弱:-)过几天把动态模块载入的特性也加入进来,让稍微多一些资源的系统也能够享受享受下linux kernel中module的威力!

* 动态模块
通用计算机系统中,一般会有可执行文件:用户想要什么功能时才把相应的程序执行起来,不要的时候则退出把内存释放出来给其他应用程序。最简单的是,
#include <stdio.h>

int main(int argc, char** argv)
{
    printf("hello world\n");
    return 0;
}
这个在Windows下或Linux都能编译成单独的应用程序,执行它就会在命令行窗口中打印hello world,然后退出。

嵌入式系统中却大多不是这样,例如ucos-ii,nucleusplus,vxWorks等,都基本上是一个整核心,一个文件包括内核和应用程序。系统稳定性、可确定性无疑大幅加强(一死全死,所以只能不死^-^),但缺少了灵活性。linux引入的module确实比较好用,特别是在调试时,用户可以在线更换模块,而不用立即全部重新编译内核。但这个module和应用可执行程序是有差别的:
module运行在linux kernel状态,应用程序运行在user态。应用程序要调用核心服务时,必需通过软中断陷入到kernel中。
应用程序一般运行在自己的虚拟地址空间(也有一些不是,平常我们看到的大多数是),这也是学术界所诟病的虚地址<-->实地址访问时间不确定性(非实时性);module运行在和kernel相同的地址空间上,如果module死掉了,kernel离死掉也就不远了。

RT-Thread动态模块载入只能支持到GCC,RealView MDK还在探索中,当然用RealView MDK至少得先想办法从文件中载入模块,现在没办法。。。所以下一次给出的带动态模块载入的版本估计是GCC的!

出0入0汤圆

 楼主| 发表于 2009-2-28 18:17:18 | 显示全部楼层
大概AT91SAM7X的移植给不出了,或者哪位能提供给我一个可以enable EMAC的bin文件吗?极度怀疑我的AT91SAM7X开发板有问题,网口灯都不亮呢,我需要一个可以enable EMAC的文件以测试我的板子。

----
呵呵,搞错了,跑keil的easyweb是可以的,这样AT91SAM7X256的移植没什么问题。

出0入0汤圆

发表于 2009-2-28 21:47:20 | 显示全部楼层
弱弱的问一下,跑RTOS相对于裸奔来说有什么好处啊?

出0入0汤圆

 楼主| 发表于 2009-3-1 14:37:05 | 显示全部楼层
RTOS和裸奔的区别,
RTOS最重要的一点是引入了任务的概念,并围绕着这一概念提供外围更完善的支持(任务间同步、任务间通信)。

功能更丰富一些的OS则会变成课本上说的,资源管理者。上层应用与应用之间通过管理接口进行和平相处,应用不用太过关心底层硬件的处理。

裸奔在需要提供功能繁重的情况下则要考虑更多的东西。例如需要提供数据传递、采集的功能;也要提供对于系统资源的管理的功能。这个时候为了维持数据传递、采集主功能不中断情况下,必须仔细考虑好另一功能执行的合理性。

出0入0汤圆

 楼主| 发表于 2009-3-2 20:31:44 | 显示全部楼层
谢谢PZLPDY

STM32开发板我已经收到了,刚才用JLink把RT-Thread/STM32下载下去,确实能够运行,呵呵,可以考虑下一步的计划了。

出0入0汤圆

 楼主| 发表于 2009-3-5 10:26:46 | 显示全部楼层
AT91SAM7X256的网口已经ping通了,不过随着一直ping的数量加大,time慢慢的加大,调试下估计就没问题了。

可惜串口有问题,母口的串口焊了个公口的串口,要纠正过来能够直接飞线搞定吗?(手上没吸锡的工具,拔不下来)如果串口可用就可以打印一些log分析下了

STM32,因为有512K的外扩SRAM,本身也有个64K的片内RAM,所以有些打算把动态模块加载支持做进去,要执行一个程序的时候从文件系统加载到SRAM里执行,完成后清除。

出0入0汤圆

发表于 2009-3-5 10:46:46 | 显示全部楼层
串口这个应该好解决的吧,难道楼主那没有烙铁什么的? 不行就再找俩母的来..最好不要去拆板子

动态加载这个强.. 只是不知道性能和可靠性以及资源占用会不会变差?

出0入0汤圆

 楼主| 发表于 2009-3-6 22:58:25 | 显示全部楼层
烙铁是有,不过光是有烙铁还是卸载不下来,所以只能另外想办法了 --> 用USB虚拟了一个串口,这样也可以显示信息啦

现在虚拟串口打印是没什么问题,但我的板子是USB线供电的,如果reset板子USB却没有复位,奇怪了!除非拔掉USB线重新插上。
谁知道这个是什么问题,AT91SAM7X芯片。

出0入0汤圆

 楼主| 发表于 2009-3-15 00:11:06 | 显示全部楼层
AT91SAM7X256的移植终于有眉目了,包含上面所有MDK的移植(CortexM3未知),都有一个比较致命的bug:
在做中断中的任务切换时,代码是从gcc改过来的,由于当时用MDK编译,报了个警告,所以改成MDK友好的模式:
        mrs        r3,  spsr                        @ disable interrupt
        orr        r0,  r3, #I_BIT|F_BIT
        msr        spsr_c, r0

        ldr        r0,  =.+8                        @ switch to interrupted task's stack
        movs        pc,  r0

==>
        mrs        r3,  spsr                        ; disable interrupt
        orr        r0,  r3, #I_Bit|F_Bit
        msr        spsr_c, r0

        ; switch to SVC mode
        msr     cpsr_c, #Mode_SVC
        ; ldr        r0,  =.+8                        ; switch to interrupted task's stack
        ; movs pc,  r0

关键出现在msr cpsr_c, #Mode_SVC上,因为它从IRQ模式返回到SVC模式时,是直接切过去,而不是像gcc那样从IRQ模式退出,spsr并没有自动复制到cpsr中(那是当然,自己做了msr啊!!)

这个问题折腾了差不多一个星期!!现在终于好了,RT-Thread/AT91SAM7X256包含LwIP网络协议栈的移植基本上完成,今天比较晚,明天整理下代码再发上来。这个版本很可能就是0.2.4最终正式版了。

RT-Thread/AT91SAM7X256指标情况:
编译-O2,(RTOS + FinSH Shell + LwIP 1.3.0 + USB Virtual COM)
Program Size: Code=73944 RO-data=1092 RW-data=832 ZI-data=35080
TCP Echo Server,50万个包无错误,无重传。期间运行3个ping,time < 1ms

出0入0汤圆

发表于 2009-3-15 12:22:39 | 显示全部楼层
Google的svn代码仓库 的连接请给出

AT91SAM7X256是那家开发板


STM32,因为有512K的外扩SRAM
****************************
这块板是优易特的板吗 芯片是STM32103ZET6?


如果要宣传到位, 建议楼主要给出 比较详细的列表 这样大家容易同步

比如 开发工具的版本 开发板的资料

我手上有 LPC2138的板+2.8的TFT ,MDK4.2 +GCC+Ulink 用不知能否跑楼主的RT-Thread
准备购入STM32,不知有何建议

出0入0汤圆

 楼主| 发表于 2009-3-15 20:20:26 | 显示全部楼层
呵呵,抱歉,为了修正AT91SAM7X256的问题所以近段时间非常忙,还没来得及把RT-Thread放到google svn上。

AT91SAM7X256的开发板是焦海波原版的开发板,呵呵,他的串口问题也带进来了。

STM32的开发板是PZLPDY赞助的STM32F103ZE开发板,内置512K Flash,64K SRAM,外扩512K SRAM,2M NorFlash,以及以一块LCD。

LPC2138的开发板能够跑RT-Thread,只需要使用LPC2148的移植就可以了,需要MDK 3.40 + ULink。至于说购买STM32开发板,暂时没什么建议。

出0入0汤圆

发表于 2014-1-24 15:52:44 | 显示全部楼层
ffxz 发表于 2009-2-23 22:05
关于RTGUI,从上面的截图来看,我想RTGUI基本上不会弱于ucgui吧,但现在也只能说是一个半成品。体系结构上 ...

LGUI有没有移植到ARM Linux的教程呢?现在好像都没有支持了啊.呵呵.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 23:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表