zoukankan      html  css  js  c++  java
  • nios中alt_main 和main的区别

    NiosII处理器的启动可采用两种方式: 自动初始化和用户自定义初始化,nios中alt_main 和main的区别也在这里。

    如果NiosII处理器自动初始化,ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。

     如果用户要避免自动初始化。ANSI C标准将提供了一个可变的入口点程序,定义程序员能手动初始化任何所用的硬件。alt_main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。例如用alt_irq_init (ALT_IRQ_BASE)函数初始化中断控制器。具体方法在例程hello_alt_main中能找到。

    另外,能使用main函数作为开头开头时cpu可能需要更大的ram( on chip memory )空间。
    最简单的例子(ram都设为4k的条件下):
    程序1:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "system.h"
    #include "sys/alt_sys_init.h"
    #include "sys/alt_irq.h"
    #include "priv/alt_file.h"
    int main (void) __attribute__ ((weak, alias ("alt_main")));
    int alt_main(void)
    {
      alt_irq_init (ALT_IRQ_BASE);
      alt_sys_init();
      alt_io_redirect (ALT_STDOUT, ALT_STDIN, ALT_STDERR);
      int i;
      i=1;
      return 0;
    }
    --------这样就没问题,编译能通过!!!!!
    如果改成这样:
    程序2
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "system.h"
    #include "sys/alt_sys_init.h"
    #include "sys/alt_irq.h"
    #include "priv/alt_file.h"
    int main(void)
    {
      int i;
      i=1;
    return 0;
    }
    ----------编译就不能通过了,提示如下  
    Console中的提示——————————————————
    **** 00000047] overlaps section .exceptions [00000020 -> 00000ab7] overlaps section .exceptions [00000020 -> 00000ccb] overlaps section .text [000001c8 -> 00000ccb] overlaps section .text [000001c8 -> 0000261b]
    /cygdrive/d/MyProgram/altera/kits/nios2_60/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/http://www.cnblogs.com/http://www.cnblogs.com/nios2-elf/bin/ld section .rodata [00000020 -> 00000047] overlaps section .exceptions [00000020 -> 000001c7]
    /cygdrive/d/MyProgram/altera/kits/nios2_60/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/http://www.cnblogs.com/http://www.cnblogs.com/nios2-elf/bin/ld section .rwdata [00000048 -> 00000ab7] overlaps section .exceptions [00000020 -> 000001c7]

    region onchip_memory_0 is full 这就是提示ram不够,根据程序适当改大一点后就能编译了。
  • 相关阅读:
    1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛
    2577 医院设置
    2488 绿豆蛙的归宿
    3315 时空跳跃者的魔法
    1079 回家
    1365 浴火银河星际跳跃
    1074 食物链 2001年NOI全国竞赛
    2596 售货员的难题
    wetask.cn领度任务全新试用体验
    多线程--生产者消费者--简单例子
  • 原文地址:https://www.cnblogs.com/xinjie/p/1530509.html
Copyright © 2011-2022 走看看