DSP/BIOS与main()函数关系

转载 2011年01月19日 08:45:00

DSP/BIOS与main()函数关系
      随着多线程技术的发展,原来委以重任的main()函数也逐渐的退化和冷落,现在变成了名不副实的“主函数”。在DSP/BIOS中也同样存在这样的问题,然而main()函数的作用依然不可忽略,其与DSP/BIOS的API函数的调用上存在一定的先后关系。
      在DSP/BIOS应用程序中,main()函数用于实现用户的初始化操作,片内/片外外设的配置,以及势能单独的硬件中断等,然而,main()函数并不属于DSP/BIOS的任何线程类型,它仅仅是一个匆匆过客,在作完用户期望的初始化之后,也就寿终正寝了,甚至连一片云彩都不曾带走。
      值得注意的一点是,应用程序在执行main函数时,并不是所有的DSP/BIOS API函数都可以调用,其间有着相应的先后关系,这是因为,main函数启动的时候,DSP/BIOS并没有完成最终的初始化,因此,main函数对于DSP/BIOS 有些API函数的调用是受限的。
       这里不得不提起DSP/BIOS的启动过程(对于Bootload暂且不谈):
       1、 初始化DSP:复位中断向量指向c_int00地址,DSP/BIOS程序从入口点c_int00开始运行。对C6000,初试化堆栈指针(B15)和全局页指针(B14)分别指向堆栈底部与.bss段的开始,控制寄存器AMR、IER和CSR也被初始化;
       2、 用.cinit段中的记录来初始化.bss段;
       3、 调用BIOS_init初始化DSP/BIOS模块:BIOS_init执行基本的模块初始化,然后调用MOD_init宏分别初始化每个用到的模块;
       4、 处理.pinit表:.pinit表包含了初始化函数的指针;
       5、 调用应用程序main函数:在所有DSP/BIOS模块初始化之后,调用main函数。在main函数中添加了必要的初始化代码。Main函数初始化之后CPU的控制权交给DSP/BIOS。
       6、 调用BIOS_start启动DSP/BIOS:BIOS_start函数是由配置工具产生的,包含在XXXcfg.snn文件中(XXX与用户对工程的起名相关,nn与使用的DSP型号相关),它负责使能DSP/BIOS模块并为每个用到的模块调用MOD_startup宏使其开始工作。 
       在这些工作完成之后,DSP/BIOS调用IDL_loop引导程序进入DSP/BIOS空闲循环,此时硬件和软件中断可以抢先空闲循环的执行,主机也可以和目标系统之间开始数据传输。
       从DSP启动的过程来看,DSP/BIOS的初始化是分为两大阶段的,一个是位于main函数前面的BIOS_init中,一个是在main函数后面的BIOS_start中。这点让人很是疑惑main函数出现的作用,究竟什么样的API函数可以在main函数中执行呢?
        这点必须弄清楚main函数前后两初始化阶段的具体作用,具体的细节可以查阅相关的技术文档,但是总体来说,BIOS_init所主要完成的是MEM模块的初始化工作,而BIOS_start负责的是使能全局中断、配置和启动定时器、打开线程调度、启动DSP/BIOS线程等。因此,在main函数中,可以调用实现动态存储器分配的函数:MEM_alloc、MEM_free;以及动态创建对象的API 函数:XXX_create、XXX_delete等。对于“假设硬件中断和定时器都已经使能的API”、或者可能引起阻塞的API函数都不可以在main函数中调用,例如CLK_gethtim、CLK_getltime、HWI_enable、HWI_disable、SWI_enable、SWI_diaable、TSK_disable、TSK_enable、SEM_pend、MBX_pend等。特别需注意的是,main函数中一定不能存在无限循环,否则整个DSP/BIOS程序将瘫痪;
        但是对于使DSP/BIOS线程就绪的调度函数却允许在main函数中调用,例如SEM_post、SWI_post等,其实质还是在等BIOS_start进行完所有的初始化后再执行如上的调度操作。
       因此可以明白一点的是,main函数穿插在BIOS的初始化过程中,为人工干预DSP/BIOS的启动提供了机会,使得BIOS的运作更具“个性化”。其间CPU的控制权从DSP/BIOS提交给用户,然后在返回给DSP/BIOS。

DSP/BIOS与main()函数关系

原文链接:http://blog.csdn.net/hanchaoman/article/details/4794097
  • zhangxiao93
  • zhangxiao93
  • 2014年08月21日 20:30
  • 674

DSP/BIOS与main()函数关系

§DSP/BIOS与main()函数关系       随着多线程技术的发展,原来委以重任的main()函数也逐渐的退化和冷落,现在变成了名不副实的“主函数”。在DSP/BIOS中也同样存在这样的问题,...
  • u013603373
  • u013603373
  • 2014年04月11日 15:47
  • 213

DSP/BIOS与main()函数关系

随着多线程技术的发展,原来委以重任的main()函数也逐渐的退化和冷落,现在变成了名不副实的“主函数”。在DSP/BIOS中也同样存在这样的问题,然而main()函数的作用依然不可忽略,其与DSP/B...
  • b5w2p0
  • b5w2p0
  • 2014年04月02日 21:58
  • 949

DSP/BIOS程序开发三:API简介

【声明:内容源于网络】           DSP/BIOS API提供可伸缩的实时核,还提供了有优先级的多线程处理。它是转为那些需要实现实时调度、同步及通信的应用程序而设计的。在一个包含DS...
  • leegang12
  • leegang12
  • 2013年12月22日 22:06
  • 1134

基础类的DSP/BIOS API调用

转载自:http://blog.sina.com.cn/s/blog_48b82df90100bpfj.html 基础类的DSP/BIOS API调用 一、时钟管理CLK (1)Un...
  • jhh_move_on
  • jhh_move_on
  • 2013年09月20日 18:45
  • 1039

DSP-BIOS使用入门

从环境说到搭建第一个工程请注意,此文默认读者已经对DSP及CCS V3.3环境有一定的了解了,知道cmd文件的配置,知道新建工程,编译并连接仿真器下载!如果你对这些还都不熟悉,请先熟悉这些!当然,最好...
  • xiahouzuoxin
  • xiahouzuoxin
  • 2014年07月24日 15:43
  • 17896

DSP/BIOS详解入门

DSP/BIOS详解入门 目录(?)[-] DSPBIOS简介 DSPBIOS的组件构成DSPBIOS的启动顺序DSPBIOS的配置 Global Setting Propertie...
  • sujunzy666
  • sujunzy666
  • 2013年12月09日 11:15
  • 1290

【转】DSP/BIOS中的SEM

SEM旗语模块通过对旗语的计数完成任务的同步和相互作用。    据个人了解:可以有两个功能(1):使用信号量旗语发送消息(类似MBX)       旗语是一种DSP/BIOS内核定义的数据结构...
  • shan275
  • shan275
  • 2016年05月07日 14:49
  • 385

(多核DSP快速入门)5.SYS/BIOS的使用实例分析

原创文章 转载请注册来源http://blog.csdn.net/tostq 系列教程目录:http://blog.csdn.net/tostq/article/details/51245...
  • tostq
  • tostq
  • 2016年04月27日 22:44
  • 10094

DSP/BIOS任务通信和同步 MBX SEM QUE模块API

DSP/BIOS的高级应用 DSP在同一时间执行多个任务,当外部数据变为有效或者出现控制信号时,对外部事件进行响应。 通常将这些任务称为线程,DSP/BIOS采用广义的定义:DSP执行的所有独...
  • pugu12
  • pugu12
  • 2016年01月26日 16:49
  • 725
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DSP/BIOS与main()函数关系
举报原因:
原因补充:

(最多只允许输入30个字)