一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

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

nios中alt_main 和main的区别

[复制链接]
发表于 2008-12-12 22:03 | 显示全部楼层 |阅读模式
NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。
/ w- f% `& ^' _" a: l如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。  V* ~3 O# C0 ?) e0 }
如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。
4 }* d* O: Y  d. F# f另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。最简单的例子(ram都设为4k的条件下):4 \8 {4 o; _; o! u/ r( y* a- _+ M
程序1:
8 H) p: n& }, r( D#include <stdio.h>  `- @! T2 K: F) o* U. o
#include <stdlib.h>8 _# q2 m" \+ i) }
#include <string.h>
$ K5 E- T' ?+ p) p) v8 a#include "system.h"# z/ _; d9 S7 n6 M
#include "sys/alt_sys_init.h"( e5 ~% d( e1 {8 b* K7 E. x# D
#include "sys/alt_irq.h"
4 [) H: e% k4 Q/ T#include "priv/alt_file.h"- Y7 ?, n0 ^1 N
int main (void) __attribute__ ((weak, alias ("alt_main")));: `/ a) [% B6 O' q7 g/ v2 e
int alt_main(void)
2 x9 Z. [. h2 E% d9 f1 P{
  [4 j: ^9 ^, C  alt_irq_init (ALT_IRQ_BASE);3 N8 n$ \$ S/ ?
  alt_sys_init();0 Y" g+ T2 ~+ n' U- j
  alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
0 W2 [4 ^0 Y; h  int i;, h# D0 v8 \( n
  i=1;
! Y$ q- H# u# r* G% |  return 0;/ X8 K5 g0 b" p4 q' r/ [: L
}
# b1 J6 d' m+ s: b--------这样就没问题,编译能通过!!!!!3 h- _' E) m* s6 r. I7 ~9 }' z. [
如果改成这样:
2 s! e/ n& x2 y2 k# b" Z程序2 * G7 R% d9 M2 |4 O2 z0 e& E0 d
#include <stdio.h>' @  D$ ?" X1 U7 Y1 x- @( z8 D
#include <stdlib.h>
$ d" {6 x# d1 f" G  t/ R% j5 @#include <string.h>4 l" r5 U- M9 X9 t; o! Z% X4 V; u
#include "system.h"
' ~+ X2 i! m! _0 X! b" l! \/ ^/ P4 e#include "sys/alt_sys_init.h"
0 ^( [- a2 v, h#include "sys/alt_irq.h"
; J' P0 F% R0 y' i#include "priv/alt_file.h"9 z" U7 ^5 F5 q7 h1 k
int main(void)4 r6 A  m. Z9 ?  b- i$ ?
{
( v2 W' x; G/ m; t1 w7 `  int i;
. b0 p) t3 ^8 _7 ~3 P/ p: [- P( p- F  i=1;
! o0 N+ `) ]& Z0 F3 nreturn 0;
9 b- R& a2 R( P# @8 y}2 ?* k$ c0 A0 \
----------编译就不能通过了,提示如下  8 \4 _: z: Z8 ^" Y1 h
Console中的提示——————————————————
& V1 w$ G8 u6 E) b**** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
4 x3 n$ G0 `# ~/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]
) d* _" O2 `$ I# O0 r9 j/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]
# k' v9 Y& V$ i( w5 q3 J) ~region onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。0 N( M; a3 Q5 U3 G
+ ?; ~- G0 p4 U! w- ^( q
[ 本帖最后由 kenson 于 2008-12-12 22:04 编辑 ]

本版积分规则

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

GMT+8, 2024-5-5 13:19 , Processed in 0.058569 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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