一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 6761|回复: 0
收起左侧

nios中alt_main 和main的区别

[复制链接]
发表于 2008-12-12 22:03 | 显示全部楼层 |阅读模式
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。
, _4 a$ K9 w4 r' y7 h) i如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。
$ o8 \7 H/ z  h1 j# ?( {9 k$ q6 O 如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。
( L* H6 q$ ~7 u3 l% }, W9 {: E另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):/ }3 F. R$ h9 G4 ]0 F" [
程序1:+ |' @: p" T$ Q4 r, Q
#include <stdio.h>& _7 u8 t/ ]/ A* d$ I# I0 Z
#include <stdlib.h>
. m8 P) ^5 |  j9 u#include <string.h>
3 a2 D( w4 t0 B2 w# c2 N#include "system.h"
/ X$ p' W' f% a+ ]. l; c#include "sys/alt_sys_init.h"
* r) }) _; v- r  u% v: t#include "sys/alt_irq.h"
3 V# H$ g' ~# y9 V7 `#include "priv/alt_file.h"& w) p+ e! i. Q7 K( a
int main (void) __attribute__ ((weak, alias ("alt_main")));
; V' b' U7 ^3 K+ }5 Dint alt_main(void)
( m' O0 ], _9 k8 Y( j2 v2 U{) ~' c( N9 x) u$ {
  alt_irq_init (ALT_IRQ_BASE);
# N1 a3 R5 I4 \7 M8 j  alt_sys_init();
# p) ]0 V+ O* u( l  _* d. p  P  alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
) V" E! U' x- n$ h8 E  int i;. l. W  H3 m! Y& w+ ~0 o
  i=1;' B9 \% E% s# o# ]0 [8 t
  return 0;7 J' T8 S, L( }2 ^: P: [" i* P
}1 f8 K; Q9 }& y0 p* c. Y$ v5 i/ a
--------这样就没问题,编译能通过!!!!!) N# X! }* E3 @& Q
如果改成这样:
( B1 L  F6 l# |2 r0 I程序2
3 Y$ r0 j$ Y0 ]' a( s4 i; ?) {#include <stdio.h>
0 q; n$ ]% k: V; W3 u6 P& t#include <stdlib.h>; Y8 A7 B0 a2 Q9 W7 T: w+ Z
#include <string.h>
7 D/ I3 F) R& z4 {5 p#include "system.h"4 m; F7 Z) ~/ s' _( t5 t
#include "sys/alt_sys_init.h"
* ^; k3 L2 Z+ v4 {: P  p#include "sys/alt_irq.h"% }+ G( m) e9 r+ c# ~$ |
#include "priv/alt_file.h"
4 I3 R  i  X- f9 \, S5 o- f$ G; fint main(void), G) u; @1 S* Z" O7 M
{4 m7 E: N1 e# c  Y
  int i;
* s% a. N6 D9 S/ @, C: L8 E5 [0 Q  i=1;
0 w% C- X  k2 q9 c6 `# m2 z2 _return 0;
# |6 z3 ^8 n2 Q* L5 X( s}
+ Q7 u$ R; `( W/ I( y7 ?2 C----------编译就不能通过了,提示如下  
  J- e& g& A/ wConsole中的提示——————————————————4 O1 T0 R1 Q' I- u/ \
**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
/ I: q" S; @1 E& m, U( [/ I/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]
6 l. @8 V, }  ]" D% z( t/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]9 E. F% P; A; e& G8 K% o
region onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。
7 @: |& g2 {' @& M- _) j* }: f4 d! Z
[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ]

本版积分规则

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

GMT+8, 2024-5-27 07:35 , Processed in 0.053812 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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