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不够,根据程序适当改大一点后就能编译了。
  • 相关阅读:
    BZOJ3566: [SHOI2014]概率充电器
    BZOJ5018: [Snoi2017]英雄联盟
    BZOJ4627: [BeiJing2016]回转寿司
    BZOJ4719: [Noip2016]天天爱跑步
    BZOJ1511: [POI2006]OKR-Periods of Words
    BZOJ4721: [Noip2016]蚯蚓
    BZOJ1922: [Sdoi2010]大陆争霸
    BZOJ2525: [Poi2011]Dynamite
    单选按钮 / 复选框 样式自定义
    HDU 产生冠军 2094
  • 原文地址:https://www.cnblogs.com/xinjie/p/1530509.html
Copyright © 2011-2022 走看看