您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> TI专栏 >> TI C6000 >> TMS320C67x DSP >> 正文
  为C6713建立一个简单的工程           ★★★ 【字体:
为C6713建立一个简单的工程
作者:mobilefo…    文章来源:mobilefone    点击数:    更新时间:2014-4-28    

今天下载了CCS的最新版本5.4,建立了一个乘加的c工程。CCS5.4只需添加一个main.c就可以编译生成out文件了,很方便。

01.int main(void) { 
02.    int a[]={1,2,3,4,5}; 
03.    int x[]={5,4,3,2,1}; 
04. 
05.    int i=0; 
06.    int sum = 0; 
07.    for(i = 0; i < 5; i++) 
08.    { 
09.        sum += a[i]*x[i]; 
10.    } 
11.     
12.    ; 
13.    return 0; 
14.} 

好久不用CCS3.3,今天用它建立一个基于C6713的c工程,因为时间有点久了,居然费了不好周折。看来还是得总结出来,不然容易忘。

除了main.c,还需要cmd文件,asm文件和rts lib文件,否则会报错。

由此产生一个问题,_c_int00的作用是什么?(一下网上收集)

在DSP启动后,系统会进入复位中断,此时复位中断服务函数为c_init00,此函数用于建立C环境,为进入main()函数进行系统初始化,主要工作是建立堆栈,初始化全局变量等。

全局变量的初始化:如果程序在链接时采用-c选项,则编译链接后的可执行程序会将全局变量的初始化放在c_init00()函数中进行,在此函数中会调用_auto_init(CINIT)函数,将.cinit段的内容拷入.bss中相应的变量中,此过程是在系统上电后进入main()函数之前执行的。

如果程序在链接时采用-cr选项,则编译后的可执行程序中全局变量需要使用loader进行初始化,这种方法一般用于在JTAG调试时,CCS即为loader。

一下是c_int00的代码,来自rts.src

01./*****************************************************************************/ 
02./* C_INT00() - C ENVIRONMENT ENTRY POINT                                     */ 
03./*****************************************************************************/ 
04.extern void __interrupt c_int00() 
05.{ 
06. 
07.   /*------------------------------------------------------------------------*/ 
08.   /* SET UP THE STACK POINTER IN B15.                                       */ 
09.   /* THE STACK POINTER POINTS 1 WORD PAST THE TOP OF THE STACK, SO SUBTRACT */ 
10.   /* 1 WORD FROM THE SIZE. ALSO THE SP MUST BE ALIGNED ON AN 8-BYTE BOUNDARY*/ 
11.   /*------------------------------------------------------------------------*/ 
12.   __asm("\t   MVKL\t\t   __stack + __STACK_SIZE - 4, SP"); 
13.   __asm("\t   MVKH\t\t   __stack + __STACK_SIZE - 4, SP"); 
14.   __asm("\t   AND\t\t   ~7,SP,SP");                
15. 
16.   /*------------------------------------------------------------------------*/ 
17.   /* SET UP THE GLOBAL PAGE POINTER IN B14.                                 */ 
18.   /*------------------------------------------------------------------------*/ 
19.   __asm("\t   MVKL\t\t   $bss,DP"); 
20.   __asm("\t   MVKH\t\t   $bss,DP"); 
21. 
22.   /*------------------------------------------------------------------------*/ 
23.   /* SET UP FLOATING POINT REGISTERS FOR C6700                              */ 
24.   /*------------------------------------------------------------------------*/ 
25.#ifdef _TMS320C6700 
26.   FADCR = 0; FMCR  = 0; 
27.#endif 
28. 
29.   /*------------------------------------------------------------------------*/ 
30.   /* CALL THE AUTOINITIALIZATION ROUTINE.                                   */ 
31.   /*------------------------------------------------------------------------*/ 
32.   _auto_init(CINIT); 
33.    
34.   _args_main(); 
35. 
36.   /*------------------------------------------------------------------------*/ 
37.   /* CALL EXIT.                                                             */ 
38.   /*------------------------------------------------------------------------*/ 
39.   exit(1); 
40.} 


01.args_main.c/    1162235705  0     0     0       1930      ` 
02./******************************************************************************/ 
03./* The ARGS data structure is defined according to a convention with linker.  */ 
04./*                                                                            */ 
05./* If the user want to pass arguments to loader, "--args=###" option has to   */ 
06./* be used in linking to generate executable. With this option, the linker    */ 
07./* will allocate a section starting with __c_args__, and with this "###" many */ 
08./* bytes. The loader when parses the arguments, will dump the number of       */ 
09./* arguments, argc as the 1st arguments at address __c_args__, all the actual */ 
10./* arguments will be dumped after that. The total space for these arguments   */ 
11./* will not exceed "###" bytes.                                               */ 
12./*                                                                            */ 
13./* if "--args="###" is not used as a linker option, linker will put -1 at     */ 
14./* __c_args__ location.                                                       */  
15./*                                                                            */ 
16./* Based on the above convention, the following code implements the access to */ 
17./* these arguments when main is called.                                       */ 
18./*                                                                            */ 
19./* This function is called from boot.asm or boot.c.                           */ 
20./******************************************************************************/ 
21. 
22.typedef struct { int argc; char *argv[1]; } ARGS; 
23.extern ARGS __c_args__; 
24. 
25.extern far int main(int argc, char *argv[]); 
26. 
27.int _args_main() 
28.{ 
29.   register ARGS *pargs = &__c_args__; 
30.   register int    argc = 0; 
31.   register char **argv = 0; 
32.    
33.   if (pargs != (ARGS *)-1)  
34.      { argc = pargs->argc; argv = pargs->argv; } 
35.   
36.   return main(argc, argv); 
37.} 

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    C6713在HPI读过程中一直保持…
    C6713可以控制主机吗?即,让…
    如何去理解6713的应用程序
    Error 0x80000240/-121 Fata…
    程序装载成功、运行跑飞
    写完FLASH后BOOT不起来问题
    C6713 调试I2C出现问题解决方…
    TMS320C6X DSP 结构与测试方…
    对于片内FLASH启动到内部ram…
    关于C6713的boot mode
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61 湘ICP备13001086号-2