一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10312|回复: 0

nios中alt_main 和main的区别

[复制链接]
发表于 2008-12-12 22:03 | 显示全部楼层 |阅读模式
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。
7 T5 @3 `% @' a$ L/ y如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。2 L) _( i6 I$ R% Q- F
如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。! g- b! _" _9 y8 L
另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):0 i- G& P3 w+ L0 @
程序1:( F+ }6 s1 U' }# S1 ?
#include <stdio.h>
9 G8 G, G) z0 e3 G#include <stdlib.h>6 @4 E% A! b. W! M' d# k0 q# p% d" q+ x
#include <string.h>
/ `& C' V4 w' |  z. c% Q#include "system.h"4 I6 f6 W" w9 R* B
#include "sys/alt_sys_init.h"/ j3 H- o. n, d
#include "sys/alt_irq.h"
0 g9 }4 I9 Y- c6 p$ P2 Y#include "priv/alt_file.h"; g# D. j6 q- m$ y/ P4 c3 O
int main (void) __attribute__ ((weak, alias ("alt_main")));% R' [2 ?8 |0 u, M
int alt_main(void)$ J" A4 _0 K5 \
{8 b3 `+ @  I9 g' ?* @1 ^
  alt_irq_init (ALT_IRQ_BASE);
: ^  i. Z$ W4 X- X# c3 j  alt_sys_init();8 m- [4 W9 k9 f' L$ ^* S) a
  alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
1 F0 t" \& g" Q+ F0 Y- l  ^) q  int i;! j4 k3 I" D$ e3 z0 u. e
  i=1;
; k+ Z- `1 `6 G1 `" G  return 0;
, U2 ^; a0 ?2 i# i$ C( f}& i9 D# l: H4 B1 F
--------这样就没问题,编译能通过!!!!!
+ s8 i# m! u  }如果改成这样:
. I% {* Q- g# m) y1 `程序2 4 D) S8 N0 H! T( K
#include <stdio.h>& B3 O$ M0 U: P  A! t; l: D
#include <stdlib.h>
* X+ k* f& i5 c. |# W  A4 Y* A#include <string.h>+ B3 y; M; ^& U( J/ f3 R
#include "system.h"9 B) Y7 |( s4 K4 ?7 ]; h% K5 w2 c
#include "sys/alt_sys_init.h"
' z9 x9 f) O$ O0 k#include "sys/alt_irq.h"# v" r6 y* I' M
#include "priv/alt_file.h"% i% D4 ]: U  k! m! l+ L
int main(void)7 ?0 k9 K6 U: ^( T! N: y
{$ g9 u' x* e8 R$ T* `" N" ?+ v
  int i;4 N- N4 ^& @& b5 D# N) v# |) i
  i=1;( k/ f5 h( a, p  u- C0 K
return 0;
9 l" x  O4 u4 I& p% d7 T$ u}
% R5 A( G: |- H, g! O' M5 f9 Q6 w4 d----------编译就不能通过了,提示如下  
! A  q% z$ M  s  B5 YConsole中的提示——————————————————
' n; `1 I; [% D+ W6 x/ Q* Y0 f1 m4 ^( n**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
% `- n0 |, g! e/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]1 [7 |/ [/ S; ^
/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]
4 o" [; F; G# N1 ^region onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。) I1 _( D: m6 [# Y
& T3 Q1 [: v! ?9 k1 k' x% V; d
[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ]

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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