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不够,根据程序适当改大一点后就能编译了。
  • 相关阅读:
    困扰几周了,请教啊,android与websevice数据交互很诡异的问题
    最新版本_adt-bundle-windows-x86_64-20140702 无法建立avd
    android向web提交数据,中文乱码
    activity怎么控制fragment中的textview组件
    关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云)
    短信列表如何让同一个号码的短信只显示一条,刚刚加载短信列表会加载所有的数据列。求指教
    Android图片上传到服务器的问题
    安卓模拟器这么慢,大家都怎么调试的?
    浏览器前缀-----[译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
    windows 下安装nodejs及其配置环境
  • 原文地址:https://www.cnblogs.com/xinjie/p/1530509.html
Copyright © 2011-2022 走看看