一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10443|回复: 0

nios中alt_main 和main的区别

[复制链接]
发表于 2008-12-12 22:03 | 显示全部楼层 |阅读模式
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。
! z* A  _( h# D, M9 U9 a- w/ b' t如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。
5 D/ a7 h, n/ W: n" T1 U- i 如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。" F* G& Y" t8 G, @- w4 y3 I& }
另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):
) E* l- @: A! I' l6 h7 ]' y程序1:7 F% Z8 Q$ G6 F- [6 z
#include <stdio.h>
1 _' u) H1 C6 `! v* {% ]#include <stdlib.h>
6 D0 n% G. h  G" X( E: l#include <string.h>* w: M- Y, k  R2 |5 `
#include "system.h"
) J+ G  z+ b3 C/ A" p#include "sys/alt_sys_init.h"
9 [0 i2 ?; \# s#include "sys/alt_irq.h"% m* @" u0 I+ O3 b
#include "priv/alt_file.h") Z1 j4 v7 N: `: ^! g' S
int main (void) __attribute__ ((weak, alias ("alt_main")));
" Y. E5 X6 E* q  j+ ^8 T' Rint alt_main(void)
2 c, t6 {0 r4 ~7 u/ o3 y/ a{
2 W! _# y% B0 G; ?5 h. X+ a  alt_irq_init (ALT_IRQ_BASE);
/ C% c0 }' U& u3 Y  alt_sys_init();8 \9 y( D/ J7 `3 S0 E
  alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
; v" A& t! M* b% R) T) e6 s' f  int i;
- k  t) j' g' w  i=1;) Z9 n& U, i' W  D2 K5 {4 U' V, K
  return 0;" E  M& B$ w' k0 K
}* L8 {) Q- w/ Z
--------这样就没问题,编译能通过!!!!!; G7 c0 @8 M5 M- b& t5 d
如果改成这样:. }' s  Q! L3 Y5 N' d  E
程序2 $ s! N, c! X' Q" u& t4 R
#include <stdio.h>
% n3 y0 V: f0 ]! ^- N2 O#include <stdlib.h>4 O' D# A/ `4 \7 j2 t
#include <string.h>" M; r9 V9 P0 @5 x
#include "system.h"9 s' Q5 [/ E) _( P6 q
#include "sys/alt_sys_init.h": [) ~( e& J# F/ @7 a7 l
#include "sys/alt_irq.h"
- T0 R. k9 H' U& h) L  t' q#include "priv/alt_file.h"# z& ^$ d$ a8 F& J8 V* R5 s% G) c8 P
int main(void)3 U5 q& x% a* n
{
$ Y% `; k& \# V7 C" ?' c  int i;
5 U% M  r8 D- O9 z' X' f0 H  i=1;
2 l! ?& N9 v9 M$ K; u1 u: greturn 0;
( k+ B* u% W+ j, X& O8 C( N}( z* S! H  ^8 s5 Y6 `6 }
----------编译就不能通过了,提示如下  
; S; k' v8 K4 n$ p# n( p) w! B; AConsole中的提示——————————————————
2 X7 S2 u6 N7 l/ p; p2 U7 c/ |9 W- m**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]9 D  J0 {7 I! }/ a- |7 c
/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]
5 U1 [! d! b) P" G$ N/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]
# H9 R: w9 A) n( k6 `; fregion onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。
/ C5 c" j$ j6 u# ?5 T, S( o# i# N
[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ]

本版积分规则

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

GMT+8, 2026-4-17 18:33 , Processed in 0.029602 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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