版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。4 q5 ^4 h! M3 G' [$ B4 {5 @
如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。
+ m# m$ \+ w* `$ I 如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。
9 `; A. \. b7 f另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):# ~/ X! T4 @, _: q$ g) v& B
程序1:- E3 H& ~: Z6 F; A* m; \
#include <stdio.h>7 Z/ y n T' Q" {3 s# I
#include <stdlib.h>
4 W; b7 T0 e7 o H+ j#include <string.h>- E6 G" b/ ]( R* @6 {+ c7 k2 L V6 N
#include "system.h"8 O7 T2 F8 r% z6 X8 z- o$ K
#include "sys/alt_sys_init.h"
, m+ A4 L' f. Q& `' x#include "sys/alt_irq.h"# O% J: d6 ?1 k& J5 q$ o7 Z4 y
#include "priv/alt_file.h"
3 Q* A: e' c. Z- O, ?int main (void) __attribute__ ((weak, alias ("alt_main")));
( }" I" d& W0 t" ?int alt_main(void)* }& G$ I$ c; g$ I# Q K4 M
{
! v v: `% Q6 a- h: F8 r alt_irq_init (ALT_IRQ_BASE); o4 N/ |4 j2 \1 N) K
alt_sys_init();8 V! o& A) O. w6 J, |
alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);" X3 R( v& N- d* W5 q1 X a" `
int i;2 a6 r$ k0 d5 U O1 ~
i=1;2 Z! ] y9 P$ ?5 z
return 0;
4 k- F; t0 _; \( Z}
) E* @: X9 b, D* u--------这样就没问题,编译能通过!!!!!
# b1 l8 E6 O5 l. {+ b4 @- y如果改成这样:
; T3 h, M. j+ G' U$ Q程序2 * z; u* A, P' N3 e- z( G6 m7 z
#include <stdio.h>
0 F5 S4 M# ^1 x& I& _; i& V#include <stdlib.h>1 l, H8 y, o* g: {, k
#include <string.h>. m1 V) `1 E, N1 ^) u' @: Q
#include "system.h"
, ]; |9 e( a3 G4 H2 p; G9 i* g#include "sys/alt_sys_init.h"
! O! k, v- b7 Q#include "sys/alt_irq.h"
7 e# [4 a, ^" A1 o' {8 N1 Y6 r#include "priv/alt_file.h"
* u! j. V1 o9 B1 e/ C1 tint main(void)* G- z1 \: d$ [( z2 B
{
- b, W5 W- y) E" K8 ~9 P2 C( b int i;5 H) j8 G$ Y6 |" V4 C
i=1;% b: Z9 Y; S. G# g
return 0;6 i) ^# ?7 a1 u1 |7 E# c
}) g( s6 A5 t C. M1 V4 z
----------编译就不能通过了,提示如下
# E, ?5 c6 g2 G! c' T5 d+ I& p+ UConsole中的提示——————————————————
5 ~4 x: a. I+ h3 N2 c$ ~% A+ w6 M**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
r0 w+ k; L6 F) R/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]
. v) K2 J! _3 v/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]
& M9 p6 W* M/ @' C1 t! jregion onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。
* C$ O& ^5 o, I) x0 \' r" S& p$ E2 W6 b) U
[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ] |
|