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不够,根据程序适当改大一点后就能编译了。
  • 相关阅读:
    rabbitmq延迟队列相关
    redis发布/订阅模式
    flask中的blueprint
    Maven学习总结(五)——聚合与继承
    Maven学习总结(四)——Maven核心概念--转载
    Maven学习总结(四)——Maven核心概念——转载
    Maven学习总结(三)——使用Maven构建项目
    Maven学习总结(二)——Maven项目构建过程练习_转载
    使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法 ——转载
    Maven学习总结(一)——Maven入门——转载
  • 原文地址:https://www.cnblogs.com/xinjie/p/1530509.html
Copyright © 2011-2022 走看看