主题 : wince下怎么搭建gcc-arm的交叉编译环境? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 59348
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-23
最后登录: 2015-04-19
楼主  发表于: 2011-11-26 23:05

 wince下怎么搭建gcc-arm的交叉编译环境?

管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
用arm汇编编写了一个程序,已经在linux下调通,用的是arm-linux-gcc-4.4.3。
现在想移植到wince下,但是需要搭建交叉编译环境,该怎么搭建,什么工具,如何设置,求助!

google只有linnux下的,说明书里面也没介绍,请大牛指教!

如果不能在wince下搭建环境的话,linux下的gcc-arm可编译的如下汇编改怎么改写才能在arm下编译:

.global GetVLCSymbol
.data
mask:    .int    0x00000000, 0x00000001, 0x00000003, 0x00000007
      .int    0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f
      .int    0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff
      .int    0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff
      .int    0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff
      .int    0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff
      .int    0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff
      .int    0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff
      .int    0xffffffff
.text
GetVLCSymbol:
    stmfd   sp!, {r4-r11}
        ldr     r2, [r1]                        /* bits_input->bit_stream */
        ldr     r3, [r1, #4]                    /* bits_input->byte_pos */
        ldr     r4, [r1, #8]                    /* bitoffset = bits_input->bit_pos */
        ldr     r5, [r1, #12]                   /* curr4byte = bits_input->curr4byte */
    mov    r6, #0                /* bitcounter = 0 */
    mov    r7, #1
    ands    r8, r5, r7, lsl r4        /* ctr_bit = (curr4byte & (0x01<<bitoffset)) */
    bne    _end_loop_get_ctr_bit
    
_loop_get_ctr_bit:
    subs    r4, r4, #1
    movlt    r4, #7                /* bitoffset = 7 */
    addlt    r3, r3, #1            /* byte_pos ++ */
    ldrlt    r5, [r2, r3]            /* curr4byte = bits_input->bit_stream[bits_input->byte_pos] */
    add    r6, r6, #1
    ands    r8, r5, r7, lsl r4
    beq    _loop_get_ctr_bit

_end_loop_get_ctr_bit:
    subs    r4, r4, #1
    movlt    r4, #7                /* bitoffset = 7 */
    addlt    r3, r3, #1            /* byte_pos ++ */
    ldrlt    r5, [r2, r3]            /* curr4byte = bits_input->bit_stream[bits_input->byte_pos] */

    movs    r8, r6
    movle    r11, #0
    ble    _end_if_bitcounter_le_0
    sub    r9, r4, r8
    adds    r9, r9, #1
    mov    r10, #0
    ldr    r7, =mask
    bge    _end_loop_sh_ge_0

_loop_sh_lt_0:
    rsb    r8, r9, #0
    add    r9, r4, #1
    ldr    r11, [r7, r9, lsl #2]
    and    r11, r5, r11
    orr    r10, r10, r11, lsl r8
    mov    r4, #7
    add    r3, r3, #1
    ldr    r5, [r2, r3]
    rsbs    r9, r8, #8
    blt    _loop_sh_lt_0    

_end_loop_sh_ge_0:
    ldr    r11, [r7, r8, lsl #2]
    and    r11, r11, r5, lsr r9
    orr    r11, r10, r11
    subs    r4, r4, r8
    movlt    r4, #7                /* bitoffset = 7 */
    addlt    r3, r3, #1            /* byte_pos ++ */
    ldrlt    r5, [r2, r3]            /* curr4byte = bits_input->bit_stream[bits_input->byte_pos] */

_end_if_bitcounter_le_0:
    str    r11, [r0]
    str    r3, [r1, #4]
    str    r4, [r1, #8]
    str    r5, [r1, #12]
    mov    r0, r6
    ldmfd    sp!, {r4-r11}
    mov    r12, #10
    mov    pc, lr
.end
[ 此帖被hdzhang在2011-11-26 23:20重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2011-11-27 07:38
WinCE有自己的交叉编译环境,是整合在Platform Builder里面的。理论上只要你的汇编程序里没有GNU汇编器特定的扩展,就可以用Platform Builder的汇编器汇编。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 59348
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-23
最后登录: 2015-04-19
2楼  发表于: 2011-11-27 09:15
楼上大牛:

1. 我的程序里面都是标准的arm汇编(SSE指令)和C语言

2. 从网上看到只要设置一下就可以,方法如下:
将汇编文件通过右键“setting”
添加commands:armasm -cpu xscale $(InputPath) "$(IntDir)/$(InputName).obj" -list "$(IntDir)/$(InputName).lst"
添加outputs:$(IntDir)/$(InputName).obj
$(IntDir)\$(InputName).obj

我根据该方法设置后编译每行都有错误,比如:
.global    color_interpolation16x16-----------------------------------error A0005: improper line syntax: .
color_interpolation16x16:
    stmfd    sp!, {r4-r11, lr}---------------------------------error A0064: code inside data section
    mov    r7, r0               @img->r7------error A0064: code inside data section
每一行代码都是error A0064: code inside data section。

3. 根据楼上所说,我google了一下,PB是编译OS或包含了应用程序的OS的编译,“EVC 自带了标准的Windows CE 的SDK,如果读者有需要,可以从Platform Builder中导出SDK,然后安装在EVC 中”,楼上的建议是否就是将PB中的SDK导入到EVC中?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2011-11-27 09:39

.global    color_interpolation16x16-----------------------------------error A0005: improper line syntax: .
color_interpolation16x16:
    stmfd    sp!, {r4-r11, lr}---------------------------------error A0064: code inside data section
    mov    r7, r0               @img->r7------error A0064: code inside data section

.global就是一个GNU assembler的扩展,我想PB的arm assembler是不认识它的。至于A0064,我不知道这是什么意思,但恐怕也是GNU assembler和PB的arm assembler的语法区别。

友善之臂光盘上应该有提供micro2440的WinCE BSP包,我想你最好参考一下那里面现成的汇编程序源代码,然后修改你自己的。我印象里这个BSP包是在PB 5.0下编译的,不需要EVC。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 59348
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-23
最后登录: 2015-04-19
4楼  发表于: 2011-11-27 14:06
引用第3楼kasim于2011-11-27 09:39发表的  :

.global就是一个GNU assembler的扩展,我想PB的arm assembler是不认识它的。至于A0064,我不知道这是什么意思,但恐怕也是GNU assembler和PB的arm assembler的语法区别。

友善之臂光盘上应该有提供micro2440的WinCE BSP包,我想你最好参考一下那里面现成的汇编程序源代码,然后修改你自己的。我印象里这个BSP包是在PB 5.0下编译的,不需要EVC。


如果改写的工作量有点大。没有开发工具直接支持GUN assemble吗?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2011-11-27 14:31
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 59348
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-23
最后登录: 2015-04-19
6楼  发表于: 2011-11-27 22:33
这个还真是世界佳题也。
如果能直接用GCC编译生成Wince可用的文件,或者是GCC与EVC或VS2005混合编译程序,将难以移植的部分交给GCC编译,来实现开源项目的移植,那将会大大推动wince的应用的丰富性!

建议友善之臂的高手能够解决!