QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2150|回复: 5

Helloworld on skyeye

[复制链接]
发表于 2010-7-28 11:18:42 | 显示全部楼层 |阅读模式
请问一下,除了置顶帖子的那个helloworld的程序。我可不可以自己写一个用printf实现helloworld的程序,然后用skyeye模拟呢? 我的意思是 这个程序只有skyeye.conf 和 hello.c两个file,然后用bfin-elf-gcc hello.c -o hello编译,再用skyeye -e hello运行,而不在任何操作系统(例如,uClinux)下运行hello。谢谢大家

hello.c的源码只用printf实现,如下:

#include <stdio.h>

        int main(void)

        {

            printf("Hello world!");

            return 0

        }
发表于 2010-7-28 13:20:21 | 显示全部楼层
不可以。还是需要一个启动的汇编文件,设置堆栈及一些基本的初始化,可以参考置顶的start.S那个文件。
回复

使用道具 举报

 楼主| 发表于 2010-7-28 13:52:56 | 显示全部楼层
谢谢。在安装toolchain的时候里面有crt0.s/crt0.o文件。crt0.s应该就是用来基本初始化的,在运行bfin-elf-gcc的时候,compiler会在main之前自动调用toolchain自带的crt0.o吗?还是说我必需要自己写crt0.s 然后生成crt0.o 最后把它和hello.o 一起生成可执行程序?
回复

使用道具 举报

发表于 2010-7-28 16:38:07 | 显示全部楼层
我试着把这个往s3c2440A上面改,结果出现了一些问题
start.s如下
.text
        .align 4
        .global begin
        .type begin, function
       
       
.global _start
_start:
        @set up irq stack
        mov         r0, #0xd2                @ make irq mode with all irqs disabled
        msr         cpsr, r0
        ldr         sp, =irq_stack           @ set sp_irq = irq_stack
        bl             hello
stop:        b        stop
                       
.data
        .align  4
irq_stack:
        .space        4096
hello.c如下
#define UTXH0 *(long*)0x50000020

int hello(void)
{       
        int i;
        char * hellostr="helloworld";
       
                for(i=0;i<10;i++)
                {
                        UTXH0=hellostr;
                }
       
        return 0;       
}
Makefile如下
CROSS:=arm-none-eabi

hello.bin:hello
        $(CROSS)-objcopy -O binary hello hello.bin
hello:start.o hello.o
        $(CROSS)-ld -Ttext=0x0000000 start.o hello.o -o hello
start.o:start.S
        $(CROSS)-as start.S -o start.o
hello.o:hello.c
        $(CROSS)-gcc -c -o hello.o hello.c
       
clean:
        rm *.o *.bin hello hello.bin

skyeye.conf如下

#skyeye config file sample
#cpu: arm7tdmi
cpu:arm920t

#mach: at91
mach:s3c2440
#mach:s3c44b0

mem_bank: map=M, type=RW, addr=0x00000000, size=0x00040000,file=./hello.bin,boot=yes
mem_bank: map=I, type=RW, addr=0x50000000, size=0x08000000

uart:mod=term
log: logon=1, logfile=./sk2.log, start=0, end=300

skyeye版本为用sudo apt-get install安装的1.2.5,
直接启动skyeye,没出现helloworld,log文件记录如下
N 0 :p 0,i e3a000d2,
N 1 :p 4,i e129f000,
N 2 :p 8,i e59fd004,
N 3 :p c,i efffffff,
N 4 :p c,i efffffff,
N 5 :p c,i efffffff,
N 6 :p c,i efffffff,
N 7 :p c,i efffffff,
N 8 :p c,i efffffff,
N 9 :p c,i efffffff,
N a :p c,i efffffff,
N b :p c,i efffffff,
N c :p c,i efffffff,
后面一直是N c :p c,i efffffff,
如果用skyeye -d启动调试,则在gdb调试时能正常出现helloworld,若调试过程中输入命令c,则异常,log记录在c命令开始的那点起为N c :p c,i efffffff,
换用1.3.0版本,直接运行则出现segment fault错误
将#define UTXH0 *(long*)0x50000020改为#define UTXH0 *(long*)0x01D00020(s3c44b0uart0对应的地址)对skyeye.conf作相应更改,启动后能正常打印helloworld
为什么arm7的处理器直接改过去就行,arm9不行呢,是否arm9需要进行一些初始化才可以呢,请问一下不能成功的具体原因是什么,谢谢
回复

使用道具 举报

发表于 2010-7-28 21:52:54 | 显示全部楼层
哦,s3c2440我们在最新的版本skyeye-1.3.1测试可以通过,但是以前的版本不一定可以。如果运行s3c2440的helloworld,建议你在skyeye-1.3.1_rc1上测试。

Thanks
MK
回复

使用道具 举报

发表于 2010-7-29 00:06:39 | 显示全部楼层
原帖由 ksh 于 2010-7-28 21:52 发表
哦,s3c2440我们在最新的版本skyeye-1.3.1测试可以通过,但是以前的版本不一定可以。如果运行s3c2440的helloworld,建议你在skyeye-1.3.1_rc1上测试。

Thanks
MK

在1.3.1上已测试,我修改到s3c2440上的helloworld正常运行,但是1.3.1的log文件在skyeye.conf中如何设置,我直接使用1.2.5的格式,1.3.1报告错误,另外在1.3.1中没找到s3c44b0,报告说不认识这个mach
刚又看了下,show-pref列表中没有44b0,这个取消支持了?
找到了1.3.1的文档,好像没有logfile了,是这样吗?

[ 本帖最后由 chuangwai 于 2010-7-29 01:06 编辑 ]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 00:39 , Processed in 0.038377 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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