uCOS-II在S3C2440上的移植(免费索取源代码)

[复制链接]
 楼主| gzweiyan 发表于 2008-4-26 14:59 | 显示全部楼层 |阅读模式
uCOS-II在S3C2440上的移植<br />作者:研一&nbsp;<a href="http://www.gzweiyan.com" target=_blank>http://www.gzweiyan.com</a><br /><br />1)&nbsp;&nbsp;&nbsp;&nbsp;下载源代码<br />下载最新的uCOS-II-V286版和Michael&nbsp;Anburaj基于S3C2410的1.6.1移植版。根据代码用途的,建立app,s3c2440,ucosii三个目录,分别放置应用程序,平台移植文件和uCOS的源代码。如图:<br />http://bbs.21ic.com/upfiles/img/20076/2007611152634269.gif<br />2)&nbsp;&nbsp;&nbsp;&nbsp;新建ADS工程<br />加入所有代码,修改ARM&nbsp;Assembler和C&nbsp;Compiler的编译器类型为ARM920T。为方便调试,编译完的二进制文件由U-BOOT下载到0x31000000的内存地址,所以修改链接参数的代码地址RO&nbsp;Base为0x31000000。如图:<br /><br />http://bbs.21ic.com/upfiles/img/20076/2007611152653292.gif&nbsp;<br />3)&nbsp;&nbsp;&nbsp;&nbsp;修改时钟频率和总线速率<br />这一部主要是修改CLKDIVN时钟分频比和MPLL总线速率,可在init.S的初始化汇编环境中设置,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,=CLKDIVN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Set&nbsp;ratios&nbsp;1:3:6&nbsp;for&nbsp;FCLK:HCLK:PCLK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,=(7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;PLL_ON_START<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Configure&nbsp;MPLL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=MPLLCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=((M_MDIV&lt&lt12)+(M_PDIV&lt&lt4)+M_SDIV)&nbsp;&nbsp;;&nbsp;Fin=12MHz,Fout=50MHz<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,][r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />也可在C的入口函数C_vMain中设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__vChangeClockDivider(3,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;1:3:6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;already&nbsp;set&nbsp;at&nbsp;init.S&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__vChangeMPllValue(184,2,2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;FCLK=406M<br /><br />4)&nbsp;&nbsp;&nbsp;&nbsp;修改内核心跳<br />Michael&nbsp;Anburaj的移植是使用看门狗作内核心跳,但在S3C2440中,看门狗与AC97控制器共用一个中断,所以需要修改中断跳转和清中断等操作。考虑到看门狗在嵌入式的重要性,这里改用没有输出功能的时钟4作为内核心跳。修改心跳初始化函数FRMWRK_vStartTicker():<br />void&nbsp;FRMWRK_vStartTicker(U32&nbsp;wTicksPerSec)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pISR_TIMER4&nbsp;=&nbsp;(U32)__vTimer4Interrupt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcfg1&nbsp;&=&nbsp;~S3C2410_TCFG1_MUX4_MASK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcfg1&nbsp;|=&nbsp;S3C2410_TCFG1_MUX4_DIV2;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcfg0&nbsp;&=&nbsp;~S3C2410_TCFG_PRESCALER1_MASK;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcfg0&nbsp;|=&nbsp;((6&nbsp;-&nbsp;1)&nbsp;/&nbsp;2)&nbsp;&lt&lt&nbsp;S3C2410_TCFG_PRESCALER1_SHIFT;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcnt&nbsp;=&nbsp;(PCLK&nbsp;/&nbsp;6)&nbsp;/&nbsp;wTicksPerSec;<br />……<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcon&nbsp;&=&nbsp;~(7&lt&lt20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcon&nbsp;|=&nbsp;S3C2410_TCON_T4RELOAD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcon&nbsp;|=&nbsp;S3C2410_TCON_T4MANUALUPD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rTCON&nbsp;=&nbsp;tcon;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rTCNTB4&nbsp;=&nbsp;tcnt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcon&nbsp;|=&nbsp;S3C2410_TCON_T4START;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcon&nbsp;&=&nbsp;~S3C2410_TCON_T4MANUALUPD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rTCON&nbsp;=&nbsp;tcon;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIT_CLR(rINTMSK,&nbsp;BIT_TIMER4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />}<br /><br />5)&nbsp;&nbsp;&nbsp;&nbsp;修改U-BOOT的中断跳转<br />利用U-BOOT已有的丰富功能,如烧写,网络,脚本等,可在没有仿真器的情况下大大减少调试的时间。<br />如果直接下载ucos,一挑战到0x31000000的内存地址,会出现如下的中断信息:<br />interrupt&nbsp;request<br />pc&nbsp;:&nbsp;[&lt3100ab28&gt]&nbsp;&nbsp;&nbsp;&nbsp;lr&nbsp;:&nbsp;[&lte7fffff7&gt]<br />sp&nbsp;:&nbsp;7fbfdfb7&nbsp;&nbsp;ip&nbsp;:&nbsp;ffffdd7e&nbsp;&nbsp;fp&nbsp;:&nbsp;33d78a49<br />r10:&nbsp;33d78931&nbsp;&nbsp;r9&nbsp;:&nbsp;51000000&nbsp;&nbsp;r8&nbsp;:&nbsp;80000013<br />r7&nbsp;:&nbsp;00000200&nbsp;&nbsp;r6&nbsp;:&nbsp;00000000&nbsp;&nbsp;r5&nbsp;:&nbsp;00500000&nbsp;&nbsp;r4&nbsp;:&nbsp;0000dc7e<br />r3&nbsp;:&nbsp;fefefeff&nbsp;&nbsp;r2&nbsp;:&nbsp;00000000&nbsp;&nbsp;r1&nbsp;:&nbsp;ffffbfff&nbsp;&nbsp;r0&nbsp;:&nbsp;80000013<br />Flags:&nbsp;Nzcv&nbsp;&nbsp;IRQs&nbsp;on&nbsp;&nbsp;FIQs&nbsp;on&nbsp;&nbsp;Mode&nbsp;SVC_32<br />Resetting&nbsp;CPU&nbsp;...<br />原因是U-BOOT的初始化代码接管了中断管理,看U-BOOT的反汇编:<br />.globl&nbsp;_start<br />_start:&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start_code<br />33f80000:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ea000014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33f80058&nbsp;&ltstart_code&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;_undefined_instruction<br />33f80004:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e59ff014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;[pc,&nbsp;#20]&nbsp;&nbsp;&nbsp;;&nbsp;33f80020&nbsp;&lt_undefined_instruction&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;_software_interrupt<br />33f80008:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e59ff014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;[pc,&nbsp;#20]&nbsp;&nbsp;&nbsp;;&nbsp;33f80024&nbsp;&lt_software_interrupt&gt<br />…….<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;_irq<br />33f80018:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e59ff014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;[pc,&nbsp;#20]&nbsp;&nbsp;&nbsp;;&nbsp;33f80034&nbsp;&lt_irq&gt<br />…….<br />33f80020&nbsp;&lt_undefined_instruction&gt:<br />33f80020:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33f80240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvnccs&nbsp;&nbsp;r0,&nbsp;#4&nbsp;&nbsp;;&nbsp;0x4<br />33f80024&nbsp;&lt_software_interrupt&gt:<br />33f80024:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33f802a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvnccs&nbsp;&nbsp;r0,&nbsp;#10&nbsp;;&nbsp;0xa<br />…….<br />33f80034&nbsp;&lt_irq&gt:<br />33f80034:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;33f80420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvnccs&nbsp;&nbsp;r0,&nbsp;#536870912&nbsp;&nbsp;;&nbsp;0x20000000<br />IRQ的中断入口为偏移0x34的33f80420。OK,在C_vMain入口处加一句:<br />(*(unsigned&nbsp;*)(0x34))&nbsp;=&nbsp;&nbsp;(U32)UCOS_IRQHandler;<br /><br />6)&nbsp;&nbsp;&nbsp;&nbsp;系统测试<br />添加一个应用程序ex3.c,建立两个子任务,分别不停的打印0和1。主任务每隔1秒打印系统的使用率。运行情况如下:<br />UCOS_FRAMEWORK&nbsp;Ver&nbsp;1.15&nbsp;for&nbsp;S3C2440&nbsp;(ARM920T&nbsp;from&nbsp;Samsung)&nbsp;:05/03/05<br />Built&nbsp;using&nbsp;ADS&nbsp;on&nbsp;Apr&nbsp;26&nbsp;2008&nbsp;&lt10:31:35&gt<br />Endian:&nbsp;LITTLE<br />Processor&nbsp;operating&nbsp;state:&nbsp;ARM<br />Task&nbsp;start&nbsp;state:&nbsp;ARM<br />CONSOL:&nbsp;COM0,&nbsp;115200bps,&nbsp;8Bit,&nbsp;NP<br />CPU&nbsp;Clk:&nbsp;406MHz&nbsp;&nbsp;&nbsp;MMU:&nbsp;ON&nbsp;&nbsp;&nbsp;Cache:&nbsp;ON&nbsp;&nbsp;&nbsp;Write&nbsp;Buf:&nbsp;ON<br />FLASH_SADDR:00000000h&nbsp;SRAM_SADDR:40000000h&nbsp;SRAM_EADDR:40000fffh<br />SDRAM_SADDR:30000000h&nbsp;SFR_BADDR&nbsp;:48000000h&nbsp;ISR_BADDR&nbsp;:33ffff00h<br />Free&nbsp;RAM:&nbsp;3100edd8h&nbsp;~&nbsp;33ffa7ffh<br />Developed&nbsp;by&nbsp;Michael&nbsp;Anburaj,&nbsp;http://geocities.com/michaelanburaj/<br /><br />Ported&nbsp;by&nbsp;WEIYAN&nbsp;TECHNOLOGY,&nbsp;http://www.gzweiyan.com/<br />Ver&nbsp;0.1&nbsp;08/04/26<br /><br />timer&nbsp;tcon=00500000,&nbsp;tcnt&nbsp;dc7e,&nbsp;tcfg&nbsp;00000200,00000000<br />uC/OS-II,&nbsp;The&nbsp;Real-Time&nbsp;Kernel&nbsp;ARM&nbsp;Ported&nbsp;version<br />Jean&nbsp;J.&nbsp;Labrosse/&nbsp;(Ported&nbsp;by)&nbsp;Michael&nbsp;Anburaj<br />WEIYAN&nbsp;TECHNOLOGY&nbsp;http://www.gzweiyan.com<br />Task1&nbsp;#1<br />&lt-PRESS&nbsp;'ESC'&nbsp;TO&nbsp;QUIT-&gt<br />5&nbsp;0&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正在运行的的任务数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当前的cpu使用率&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每秒任务切换的次数<br />01010101010101010101010101010101010101010101010101010101010101010101010101010101&nbsp;5&nbsp;1&nbsp;141<br />01010101010101010101010101010101010101010101010101010101010101010101010101010101&nbsp;5&nbsp;1&nbsp;141<br />01010101010101010101010101010101010101010101010101010101010101010101010101010101&nbsp;5&nbsp;1&nbsp;141<br />01010101010101010101010101010101010101010101010101010101010101010101010101010101&nbsp;5&nbsp;1&nbsp;141<br /><br />7)&nbsp;&nbsp;&nbsp;&nbsp;移植小结<br />这次移植的难点在U-BOOT的中断接管,修改完内核心跳后,内核一运行就自动重启。后来细看输出信息interrupt&nbsp;request才发现这不是ucos输出的,IRQ中断仍由U-BOOT管理。找到问题的原因,解决方法就好办了。可以直接在U-BOOT里通过mw来修改,也可以由ucos来修改。<br /><br />如果各位朋友在移植过程中遇到什么问题,可联系我们免费索取该移植包。<br /><br />伟研科技&nbsp;专注于Linux系统移植及应用开发&nbsp;<a href="http://www.gzweiyan.com" target=_blank>http://www.gzweiyan.com</a>
syq_618 发表于 2008-4-28 11:08 | 显示全部楼层

atmel

atmel:at91m55800A芯片<br /><br />有没有在at91上的移植代码?uCOS-II&nbsp;在ADS开发环境<br />
l0p0c 发表于 2008-4-28 16:01 | 显示全部楼层

嗯,先抄下来,以备后用!

  
duo2182 发表于 2008-4-29 16:37 | 显示全部楼层

呵ARM9了,这……

  
l0p0c 发表于 2008-4-30 12:03 | 显示全部楼层

很厉害 啊

  
 楼主| gzweiyan 发表于 2008-4-30 15:42 | 显示全部楼层

免费索取源代码

http://www.gzweiyan.com/<br />QQ联系免费索取源代码
l0p0c 发表于 2008-4-30 16:49 | 显示全部楼层

免费索取……

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

本版积分规则

52

主题

146

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

52

主题

146

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部