一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10313|回复: 0

nios中alt_main 和main的区别

[复制链接]
发表于 2008-12-12 22:03 | 显示全部楼层 |阅读模式
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 编辑 ]

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-2-25 15:09 , Processed in 0.029833 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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