版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。
5 U# _5 ^9 }8 o如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。7 @+ N' W( ^" R$ f- O4 e
如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。1 l& x. ]+ s& v( F/ _; {2 G/ c
另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):% h- {; _% A# L( q+ c
程序1:
; x$ T. z! s/ s# B1 h#include <stdio.h>. y$ R1 \ e2 b# M/ y8 r" ~# K
#include <stdlib.h>" E: M) P( _! O b! T/ n
#include <string.h>/ T; P3 y* @. w# u& Q, } R
#include "system.h"' }, [; P. f5 n. j
#include "sys/alt_sys_init.h"2 P3 ]8 i' {! B ?8 _+ a, I
#include "sys/alt_irq.h", @6 }0 f; ?" G6 ]( n7 w
#include "priv/alt_file.h"" i( O, |! n% g) X' r, |
int main (void) __attribute__ ((weak, alias ("alt_main")));
2 p1 D! ~' \8 x. P: }int alt_main(void)/ T2 I: o$ S N9 Z+ O! Q! o, p
{
: c/ h c% A/ b alt_irq_init (ALT_IRQ_BASE);
8 h7 X' n @ R, K" L* ~8 a alt_sys_init();
3 C8 D+ P# b& V5 C6 d' E$ S) ^0 z0 k alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
) n1 {( V$ u& Q" n" I0 [1 M8 Y int i; o2 @( w5 t7 B+ `5 T, g" L
i=1;( w3 P* |) I3 J
return 0;
7 L6 W, q: J2 r+ r( A}
# ]3 F5 L, i8 f, _' W4 h; s--------这样就没问题,编译能通过!!!!!( ~% N5 P) S0 e* R- p# L# ~
如果改成这样:
% r& m( U5 ?! U# E1 E2 Y程序2 6 i+ k, C1 L9 L$ p+ m4 x( p" H
#include <stdio.h>
2 l) Y; W& o; X9 b x#include <stdlib.h>
3 X' ~/ {" {; z- i4 |7 t9 x) e#include <string.h>
( e; l8 h! d0 Q, I0 I0 k#include "system.h"
1 T. \, ?+ Y; c) R, v2 p#include "sys/alt_sys_init.h"
4 v, M* e6 B E0 m) e, C#include "sys/alt_irq.h"" n# z$ L7 r6 h
#include "priv/alt_file.h"
/ C+ @$ V3 D% e/ G) a9 zint main(void)2 p( s C1 w( j) W- N+ j6 Z
{' ]9 `& \5 S; P5 }
int i;) `* w! T8 H! t# O9 c0 ` G. n
i=1;% ~5 b* m* ]2 ^9 Z# i
return 0;* ?! p: q, f q
}* c$ j) t6 S" Y% r4 x* P
----------编译就不能通过了,提示如下 8 k0 \. Y4 N6 D7 ]# n2 C
Console中的提示——————————————————7 i* ^! R( O$ Y: m8 x
**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
* s+ l8 B9 T/ ?- ?$ L/cygdrive/d/MyProgram/altera/kits/nios2_60/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld section .rodata [00000020 -> 00000047] overlaps section .exceptions [00000020 -> 000001c7]
( K: u! y; I3 p( r- l/cygdrive/d/MyProgram/altera/kits/nios2_60/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld section .rwdata [00000048 -> 00000ab7] overlaps section .exceptions [00000020 -> 000001c7]
$ ^7 Z# u: T& @' u- dregion onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。
) j, F" n9 Z$ Q4 R) u a1 s+ ` F
- r( k* x" u, u; K ~4 ]' D: U[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ] |
|