找回密码
 注册
关于网站域名变更的通知
查看: 903|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
3 D* e4 x! r% y# s8 {   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
/ v. B/ d$ r+ H' G             RUN = RAML6,             PAGE = 1    /* Run section from RAM */9 {. i8 n$ ]6 ]' k
             LOAD_START(_cinit_loadstart),8 `: R9 Z1 r6 |5 `  A( Q( U2 Q4 h% z
             RUN_START(_cinit_runstart),
$ j) R7 B8 W; \7 d) @3 `             SIZE(_cinit_size)
- O* |- h. G' i" k2 I复制代码
+ _+ i) R3 n8 |2 {0 |: ^4 }我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
4 D- O: |" O- L1 c; S有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。
# ?. Y$ E4 _/ h; P8 b那么本文后半部分就讲全部拷贝的方法。
9 F# a. n$ n# \- E( z, c2 y首先我们来看F2806x_CodeStartBranch.asm这个文件。5 E: ^& {( p& t9 g" @# @
***********************************************************************
' W* _" g# w& J: R, N5 ]. f9 U* Function: codestart section9 T. V$ s: p+ l; Q
*' `" T: ^( j' E5 u) r6 z1 z
* Description: Branch to code starting point
) }5 `1 ]4 m. z& v3 `% n9 G  p1 b* K***********************************************************************" r, |. ?+ [' L; ~  t* Q# b: @
: Y) N& O- Y4 J* v  k5 K, b7 {
    .sect "codestart"
9 G/ ?0 e! h  Q
/ c% e) q# i- h. c# U2 Fcode_start:, v% ?) J" U' ~* h4 q
    .if WD_DISABLE == 1
, u5 c$ u) s- \! |% ^3 O# L        LB wd_disable       ;Branch to watchdog disable code' e& Q/ ^" b7 X' r* h4 @* \
    .else9 d, u2 }! {- y8 M9 j
        LB _c_int00         ;Branch to start of boot.asm in RTS library
) c. U" {% S+ u: Q* B1 }* G' \    .endif
: a# N. @" _9 J/ K5 [! Z/ m9 a) a: b$ ~' X/ H; t: N
;end codestart section3 w6 T$ s" a: S9 Z
复制代码! r8 s& {0 z" c; ^1 q9 `9 W
controlSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。$ N+ ]9 U. `9 L. \0 f/ M
8 @7 P1 P# O- F# A) K
那么我们就把这句话改掉。让他跳转到另一个地方去。
" u. [6 M  `6 h& a# k    .sect "codestart"
$ E1 L7 ?* n6 K  S+ V" e, h7 Q0 |" L
code_start:
. H; B. ?" P7 f& q. q    .if WD_DISABLE == 1
/ D6 s4 X: v* p. F; G/ I& p. b* ~        LB wd_disable       ;Branch to watchdog disable code
9 Q* y2 p7 O( S( N* B4 ?; G' u    .else5 `) i+ z" a" E/ H; X1 A1 `
        LB copy_sections    ;Branch to copy_sections
4 r* z: w! L2 x2 r. Y; k& K    .endif  D9 i3 _2 z8 }9 Z7 Z
复制代码! m9 m* w( e$ c- \2 ^8 ]
跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm
6 e7 m0 f/ e3 j% ]7 L;############################################################################
9 H+ |, j" i: g: ?0 y. o+ o;
. [' Z1 A# R9 s7 K7 M' o2 }/ U; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm
# _: R# B. _& G+ `% U; G;+ S2 A3 ~6 V$ D0 Y2 N+ f  K: z
; DESCRIPTION:  Provides functionality for copying intialized sections from
  w0 a, {5 R' L4 |" F9 s;                                flash to ram at runtime before entering the _c_int00 startup
: {2 h; Q/ T4 @9 d+ j* I;                                routine2 V" O8 m; Q8 B- L
;############################################################################+ Q; Y  R( Z3 H/ y; l
; Author: Tim Love
8 T1 t. A6 x) x# O; Release Date: March 2008        
# N9 @& ]; Q7 m, Z( `;############################################################################3 s4 ~  S8 K$ ]; z& Y+ V

4 e6 o  L+ D2 U1 K) a7 V1 }" l, I2 [. V+ I7 `0 M' Y
        .ref _c_int00( n; h- |# ^2 u0 a- r, L
        .global copy_sections
( h6 q4 x0 K  {. c3 y/ G; O* C0 q        .global _cinit_loadstart, _cinit_runstart, _cinit_size, |& y% l1 t. x# O' ^" s
        .global _const_loadstart, _const_runstart, _const_size  i) W2 \3 E# Y# L& }( j
        .global _econst_loadstart, _econst_runstart, _econst_size
" _0 x8 {9 X5 q1 u        .global _pinit_loadstart, _pinit_runstart, _pinit_size) z' y% h7 L& F
        .global _switch_loadstart, _switch_runstart, _switch_size
* O+ ^7 G8 B# C4 A8 w        .global _text_loadstart, _text_runstart, _text_size
4 a  i+ Y3 \+ ^3 x  }$ _+ O: U        .global _cla_loadstart, _cla_runstart, _cla_size2 ^9 j6 J. W, O, R
        
# ~& r/ R+ |4 S$ g& H***********************************************************************
% S- D% ]0 o2 g* Function: copy_sections
( p- l& J6 @8 b6 `: s! S*/ d& H/ w2 u4 B( V$ C
* Description: Copies initialized sections from flash to ram
, Q  I+ L$ Z7 j***********************************************************************( A# j; N$ j& d7 D. c
1 ?" s! h3 L3 a! K. y9 I( ]
        .sect "copysections". o$ ^- p8 x1 v6 ?

. [: t6 r+ J7 j1 X9 |. Y3 {copy_sections:# \/ t) z9 s$ S" A

: s0 R' o, v7 A4 r! k        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5& Y- c9 s' x3 t6 |2 @
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
9 ^' X# ?  H  m+ l& h" N  z8 _        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
' y) [& D' n) k) l7 V5 Y! @    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR75 i" z& W- G! n5 |* _
    LCR  copy                                                        ; Branch to Copy
; w3 [# `: {; I+ `% Q, ]) `    4 n$ h, q8 v# Y8 ]5 U0 U
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5* g9 `( F& j) z) @! c% O& y
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
, m$ j5 n5 ~# k        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
. |) {- ^7 j+ t2 a9 I' v% ?    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7' A7 N  z4 K: V7 q
    LCR  copy                                                        ; Branch to Copy. h6 y, ^; Q. |; ~8 n

( }( V! a: U7 J6 g1 R        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
  ~" @! ^3 }% v0 `/ K" Y        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
+ I  Y2 j, j2 C) N  W2 T  L        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6
/ b9 J0 g* g: M+ E4 d    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
0 {+ t( Y$ \  Z7 r' i2 N) G    LCR  copy                                                        ; Branch to Copy
4 B6 h4 y( F7 K8 J: u. W, p9 F
7 s" g. ]9 ]( X, h/ R( q        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR59 `8 I: p* M& }, e; j7 v5 O1 ?
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC1 c0 T& N" J+ Y4 \: w' E# O2 T
        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6
) m- M, c/ A. r. S5 n7 D9 {) b    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
+ K1 L( N, e3 W1 \4 b. C    LCR  copy                                                        ; Branch to Copy& Z) @" q5 L3 l8 E
. B# C7 N- T& j* D) H4 M1 ~: c
        MOVL XAR5,#_text_size                                ; Store Section Size in XAR51 G) b+ {$ m5 j1 J9 u# G/ D
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
4 ~) O( I& l& V4 |6 y5 o, f        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR64 C4 C" G) @( z, ]5 L( ?3 r: Y
    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7
, U/ ]2 F7 `5 P    LCR  copy                                                        ; Branch to Copy
2 B5 w  ~& o0 A    , G; u" b' A3 D) t3 t9 @; ~
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5+ S/ l+ N2 S, R2 P7 b' O0 L2 I" g
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
* `" B- Y" X# z% w) D' b7 h6 X$ v( A        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6
. p1 z" {9 X$ R" w, N+ e    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR7( E& e& S* [8 l. [
    LCR  copy                                                        ; Branch to Copy ; x+ W/ z% C1 m' `$ B$ S

0 B' O9 l: u+ I' r, t) z    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5* _# }  \; K( n! z0 G; s) J6 x
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
+ A: p* {8 E9 J# [0 p        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6
1 ^# ]2 i* Y2 q3 |5 y- \6 Y5 D    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7
4 q3 E! U8 S  f0 F8 h) Z    LCR  copy                                                        ; Branch to Copy, l# R) K5 g* d
% ^' W$ K0 k/ R- e" C0 n4 \6 `2 U' C
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
$ l# S6 d! T$ Q- w7 r; x& @- |
# H( A5 J) s  [9 f. d2 }$ I4 e: |copy:        / ]' W5 L( c8 P8 d$ a
        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)$ E6 D; {8 H( |: ~4 f; w, B3 T  P: |
  o( f/ l% {0 a! `* K% E( y( e
    RPT AL                                                                ; Copy Section From Load Address to! @8 H  Q) |  m$ P* P6 r4 p& [3 y
    || PWRITE  *XAR7, *XAR6++                        ; Run Address$ ^+ E* J, L7 U2 Q, G" c

0 N# v: q! J0 Kreturn:0 i! N* ^' y) x6 y- k* p" w
        LRETR                                                                ; Return  M( {7 W& i: \& ?, A
! I5 J: J3 A3 w
        .end- C% P' q! f6 i/ @- H0 B
        3 ]# \. D9 L& v' Q
;//===========================================================================+ t0 ^: y( r/ k, x3 k8 [+ G! H
;// End of file.
4 X1 L( a# M& |% C8 ~3 j;//===========================================================================
% H% s$ q( i$ W4 E1 b复制代码0 _( {6 ]9 x6 \0 t' ?
& W7 m2 B/ \+ h- |
看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。3 ~3 Q" A) y6 J6 M8 ]) B  I
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。/ O1 _) U8 F4 a6 ?. W( |7 L# o
这样就完成啦。是不是很简单。
6 {# j6 [$ `2 g* A

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德
. j. r$ G/ X; l0 W

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩
8 o- ~& F* x) d0 b( B3 j( k- h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 10:11 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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