找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 120|回复: 2
打印 上一主题 下一主题

【TI C2000的使用经验】CMD文件解读&从flash里搬运RAM函数

[复制链接]

211

主题

652

帖子

1507

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1507
跳转到指定楼层
1#
发表于 2016-6-28 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
! V6 P4 K* h8 t) P   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */ , w* l3 [/ I* M  `% s3 q! Q
             RUN = RAML6,             PAGE = 1    /* Run section from RAM */' k: z/ k; b9 |5 b* H# O6 f
             LOAD_START(_cinit_loadstart),3 s3 T. ?& Y2 O1 G5 K. M: L0 [: ^
             RUN_START(_cinit_runstart),% k, J" T9 A; w, Q
             SIZE(_cinit_size)
, Z  ~3 }! z) G1 ^' D复制代码
3 c  L$ _. }: k我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。  u# ?8 F7 Z. u+ r3 U+ p
有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。3 u; d8 W  C1 b6 G/ m6 Q" P) z
那么本文后半部分就讲全部拷贝的方法。" j. M% P; A$ F5 R2 t
首先我们来看F2806x_CodeStartBranch.asm这个文件。
1 N2 ]3 D; r' D) [) R***********************************************************************2 q, J% v2 M" `( L* p, P2 e
* Function: codestart section
2 @( O' I  Y* u6 e9 F) J+ Y*$ j  ~7 D8 E2 D( d. s
* Description: Branch to code starting point' A2 l. Q9 A+ V
***********************************************************************
3 F& j2 X/ j/ h2 j7 f; F) k& l# W* V9 |3 ?
    .sect "codestart"8 R+ V- N0 r$ m1 E1 P) q
" H" I; m% y# T
code_start:6 X3 C# u. K% c
    .if WD_DISABLE == 1
8 ^+ D$ ]1 `" P/ D9 D0 x        LB wd_disable       ;Branch to watchdog disable code' V2 Z" M* [+ Q: P& t6 k* d
    .else
0 P& @0 _- p" o" {, N2 K7 u        LB _c_int00         ;Branch to start of boot.asm in RTS library; a3 Q- z4 u/ X- `+ g6 L
    .endif
$ C; |' }" P" \  v
# n8 ~. G- S$ m% p9 w;end codestart section
- A) d( _5 ]5 T$ w  j+ F复制代码
: g( N  ~2 m& _$ r7 U5 n. V" U6 J% \controlSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。/ k3 i7 J  _6 J3 ^
7 {) ]6 I8 e0 O4 R
那么我们就把这句话改掉。让他跳转到另一个地方去。) u$ \8 n8 M( L
    .sect "codestart"% r0 ~5 O" V0 i
& @; N( s) e3 h4 z: r# g
code_start:. a' |  N& J: g( @' ^
    .if WD_DISABLE == 1/ Q& x% l/ A7 t% Q- O
        LB wd_disable       ;Branch to watchdog disable code) K5 m7 L! u" Z1 K- ^
    .else, @( x, f8 P- p# t; ]; R
        LB copy_sections    ;Branch to copy_sections
% j2 z& N. z6 N    .endif
% o" x' p, ^* u+ p2 |; v; i复制代码
% D; \  A- D- E, J: V9 M8 L跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm
9 _& p0 e% x6 P  A;############################################################################
4 W! o0 Z- G5 w, |;" y" l. E( W+ t7 {7 r
; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm) `6 H6 ~/ t+ N: {0 q9 u/ _1 O
;2 B6 {5 @! |6 H
; DESCRIPTION:  Provides functionality for copying intialized sections from 1 c: ^1 @: B, H) @& c+ o) w4 y$ }& O
;                                flash to ram at runtime before entering the _c_int00 startup5 Z1 j: x( J6 x5 s6 o9 U# ]
;                                routine
; y5 O: a9 J) s4 R1 V: Q6 F4 V;############################################################################
1 k7 h+ r$ y1 l2 b; Author: Tim Love3 b' x. b) o0 I" o  f. ?
; Release Date: March 2008        5 r& ]% n# m( e4 {
;############################################################################7 Z4 K. ?% `2 W

8 S. G8 v: x* y' j9 @- A
/ X& E+ N. u/ g9 _7 b        .ref _c_int00. Y$ H, m( |4 f9 M7 E; S6 n
        .global copy_sections
7 J) i- x* J( ?, L; E) \- I        .global _cinit_loadstart, _cinit_runstart, _cinit_size
3 f! K7 E7 a9 W( v- f- t' j( G$ f$ u        .global _const_loadstart, _const_runstart, _const_size
1 {9 R7 s) J. A) d6 P        .global _econst_loadstart, _econst_runstart, _econst_size
; t5 e6 B" T: I/ @        .global _pinit_loadstart, _pinit_runstart, _pinit_size! H! O, E( e; \4 h' [
        .global _switch_loadstart, _switch_runstart, _switch_size! {$ D( k( ^0 F' h' F
        .global _text_loadstart, _text_runstart, _text_size
- m& j, K6 V' N1 b) _# T        .global _cla_loadstart, _cla_runstart, _cla_size  _" T. O6 J& G% |# u7 j  C/ F
        $ ~2 n; P1 _- q8 n. z
***********************************************************************
7 |& p# k/ t2 y; D0 V5 q3 h2 c* Function: copy_sections0 n/ Y/ @' r/ W) j# Q2 Q' X
*6 h/ ?8 ]3 n% x) d
* Description: Copies initialized sections from flash to ram' q/ p* h) c6 n* O0 q
***********************************************************************
, {4 G0 D& m, z" i9 |& G6 |* {9 J
        .sect "copysections"
7 d6 s! f; N6 r% S
4 R* T4 H' @1 s5 T3 jcopy_sections:# [' D# K- t9 j  g  j( J

5 B/ `1 r  l3 |        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5
0 O- e! S4 R( W2 W0 ]: `: R8 E        MOVL ACC,@XAR5                                                ; Move Section Size to ACC0 ^5 ^0 o8 C: |  P
        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
4 x% g% J( j4 t3 m    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7" e( |: S2 J* O) v
    LCR  copy                                                        ; Branch to Copy
# i+ N, x$ n+ l: G5 n' }  e3 m    . m7 o- [/ D+ r2 f/ Y1 l+ y
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5
$ k: {* S1 }  i' e( d# V: @        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
7 L1 N7 U' @& U2 u( i        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR61 r- y7 _" E9 ?2 X. u
    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7
* n& }' r, `! [6 c7 ~! N; m    LCR  copy                                                        ; Branch to Copy
4 m/ Y0 Q5 X: K/ t: J
- E3 [- [/ C6 S' J. a8 E        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
( u7 i. \! ?- m2 e        MOVL ACC,@XAR5                                                ; Move Section Size to ACC& j0 p9 d; t9 u: R7 e2 f
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR66 s0 ~0 m6 `( t+ u
    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
) Y. e+ r- C; c" m2 b8 c( a    LCR  copy                                                        ; Branch to Copy
, N: z% ?4 j, g
6 p, z! p" _$ Y) S$ J/ i        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
# ]3 c  P% P2 q# i        MOVL ACC,@XAR5                                                ; Move Section Size to ACC) J- T! C; @. Y& j+ n
        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6- |( ?( l' D8 |1 v  b
    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7, [! @, a4 S1 T
    LCR  copy                                                        ; Branch to Copy
+ N( }* i5 u, ^" u0 r# J; A$ p, d$ C$ n3 d1 G% ~/ n8 q" f* w* u
        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5$ o: P* g; |8 _" F. ]$ W& h) m; O
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC8 O, y' K( |! v+ m8 j: \2 ~
        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6, v9 y3 T+ T8 v0 s* g% }
    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7& u5 H+ r+ ]- ]0 S7 p/ T( E" H4 l
    LCR  copy                                                        ; Branch to Copy
: ?, O* f+ [# t! d- a    ' y3 d4 D4 c: Y3 x) n
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5
0 U. q0 J/ L: H# i- q# S) O4 u        MOVL ACC,@XAR5                                                ; Move Section Size to ACC6 \7 J$ O9 U" A
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6( ]& e4 S: C0 B" Y
    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR73 T/ I7 N1 C/ Z) x1 h
    LCR  copy                                                        ; Branch to Copy
  m& t+ e  Q' g  D' ^
) Q2 b# i8 T( x7 {3 E; }, h    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5* N  w( ]: q$ m! n  e) Q( z
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC* r# n3 g. M( M, c
        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR68 S, U; k: H# t$ B4 `
    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7
! T8 U2 p5 w/ b( i4 y$ |6 x    LCR  copy                                                        ; Branch to Copy6 r% d" A7 [* ~' [

. W, S* L3 t. U% u/ |" i    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
( w1 Z+ J* X! \" v9 f- R- [; B. B  b% n* M1 Z% ]- f# S
copy:        
$ u* F1 m$ _3 ?        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)
  F% `# Z% K- D% g6 T6 o, e9 h* _& z3 K# N, t
    RPT AL                                                                ; Copy Section From Load Address to9 W  F# w$ V- X- F) V3 i
    || PWRITE  *XAR7, *XAR6++                        ; Run Address
) v; p4 G5 B- ^
8 |+ }7 j8 D) o2 @return:
& l' Q+ w0 Z9 W$ ?7 s8 ]& O5 ]) c, N        LRETR                                                                ; Return
- Z. a3 V4 V7 C9 H3 C* V- Z: N. v: T
        .end
+ h5 P1 }5 o" Q8 d        1 C2 v" o& P  F/ o! K
;//===========================================================================- n0 o( O/ F0 d& C6 S. L& W  d) u2 x$ H
;// End of file.
& A& X3 x) @0 |; J/ K: H- P;//===========================================================================: w2 R; Z$ s" A' A
复制代码& {/ E. i% V! l+ L

/ v( ]! c. V2 q% Z9 s: a9 F- z看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。6 D$ S- Q: y1 ~" f
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。) q8 W/ j; [2 Q4 n
这样就完成啦。是不是很简单。% h6 F1 v" \+ i" E7 K" _1 {9 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

211

主题

652

帖子

1507

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1507
2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德
+ R1 \$ ]1 y0 ^% W2 L2 A6 U5 V

157

主题

597

帖子

1239

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1239
3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩' Y7 S2 o' R" ]9 O, `9 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-19 05:25 , Processed in 0.055400 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表