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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
0 m* M$ t( _6 x4 n   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
& W5 z0 c, W8 t' ?+ h) \6 E             RUN = RAML6,             PAGE = 1    /* Run section from RAM */! K; d4 T  ^* k( H: P* ]' S2 K! {
             LOAD_START(_cinit_loadstart),
! v7 s, {- q; v! }+ Q- w( G" W             RUN_START(_cinit_runstart),, X; x$ R: F  r
             SIZE(_cinit_size)
2 R# G4 X) u* |- G' h7 L复制代码5 g9 s3 Z$ z% F
我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
$ V2 A) q" u3 [0 E% K( A6 o有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。. |2 i' h5 @8 [
那么本文后半部分就讲全部拷贝的方法。  Q* o* U% t6 L8 o" ?) m
首先我们来看F2806x_CodeStartBranch.asm这个文件。6 D4 A. c  n: D; Y4 ~
***********************************************************************: d: a  q1 O. o; f  Y# H) N
* Function: codestart section0 L9 q" ~% v1 }6 ?7 s5 j) C1 e0 }
*. q, S" ]. ^( j" u6 v4 @# [
* Description: Branch to code starting point7 }$ p" \( f, l
***********************************************************************
  ~/ R  s/ a' h: p9 e, {! V; X
6 I, v# {7 q1 G5 ^" X    .sect "codestart"9 _; f1 O; Q. L7 G
9 e6 @" o8 R) B/ E% h& k
code_start:
& z" J  o" I: j( q    .if WD_DISABLE == 1
1 o. ^0 @' L% h$ X        LB wd_disable       ;Branch to watchdog disable code
! f6 c( ~, `' \/ s    .else
! p# a( V$ ~0 c3 F8 w; }        LB _c_int00         ;Branch to start of boot.asm in RTS library
3 T, `% i9 S/ H4 W1 V. w: N9 U; O! r    .endif& q  c5 W. B  ~. |5 s
# F) o% s+ @" b8 b" H
;end codestart section! P( y2 h# A- f) s1 k
复制代码
3 R( k1 v' i2 v0 k9 L1 x' g  xcontrolSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。
( n. K0 I( h6 S6 E) k6 w
5 W& I6 `/ \+ A& k8 R那么我们就把这句话改掉。让他跳转到另一个地方去。
2 G2 [( O: i- k/ B: g+ w    .sect "codestart"
1 g. L2 K5 I' Q; |  @7 r' K! n( K( X$ _" U/ F
code_start:1 z' X$ w; P% N3 f
    .if WD_DISABLE == 1: M+ r, n2 l6 P
        LB wd_disable       ;Branch to watchdog disable code4 n( W6 f% B" V, C
    .else
( W4 S& R. t8 H$ n3 k) j  Y2 P        LB copy_sections    ;Branch to copy_sections
4 X. y$ Z* P6 l    .endif5 w7 z8 C# H: x5 }: ^5 p5 e
复制代码
1 j6 q6 J( h' X: n/ B, I, P7 |' g跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm/ X' d& J" R  W  s! q# z4 M
;############################################################################# c8 n+ g# q* {: N* Z( L
;
% m. K* h* H% F) O+ j4 Q; D; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm9 g# ]! K4 k/ P4 M% g
;
3 c" n% S3 U) k) n/ D1 ~; DESCRIPTION:  Provides functionality for copying intialized sections from ( l" q; ~$ _6 F8 c- z
;                                flash to ram at runtime before entering the _c_int00 startup1 X1 G' U' G0 o
;                                routine- d8 X7 G& T% p# g: X. U
;############################################################################- ~5 v2 e" n& r  J; m! {$ T! i
; Author: Tim Love
/ ~% t: D8 V1 r3 x, j1 P3 e; Release Date: March 2008        & L* Q) C) k6 v* c- q) W
;############################################################################
1 z! [0 l" ^, @) L
% {# L$ E" p* S! N/ X4 O; }+ y+ n7 X) _" @( p+ G
        .ref _c_int00
. f+ h! z! [; d# {        .global copy_sections
8 B3 F9 B5 h( K& t        .global _cinit_loadstart, _cinit_runstart, _cinit_size
, s5 h, t, M9 ]. b" k        .global _const_loadstart, _const_runstart, _const_size1 Q, F% u; f' \  w. r
        .global _econst_loadstart, _econst_runstart, _econst_size3 q& o; H; D9 V. L  e" i
        .global _pinit_loadstart, _pinit_runstart, _pinit_size
8 |2 J5 \) ?  {6 h2 l+ s        .global _switch_loadstart, _switch_runstart, _switch_size5 k0 c7 `) b/ T
        .global _text_loadstart, _text_runstart, _text_size3 F( C# ?' V, }& q. f: D5 ]& x: I) }
        .global _cla_loadstart, _cla_runstart, _cla_size
' j3 |( v. b; e        $ P5 b8 n: i: M' |7 M% P- ^; [; c
***********************************************************************% k6 ?2 O  ]% M' `) T
* Function: copy_sections0 ]" d( C6 o* m" ], a* H# i
*
9 ]; Z% V6 {- c* Description: Copies initialized sections from flash to ram
$ z+ s0 p5 k5 R" n***********************************************************************- r9 z$ Q8 }& a1 X7 U/ R
$ p3 u# }. r+ D$ k1 ?$ i3 Y/ V3 C
        .sect "copysections"
. Y6 g6 F7 v; C6 p+ i9 c4 O0 C6 w8 M& ^( i. p2 @- G! f4 y3 K
copy_sections:
1 ]( k+ t$ K0 Z: b* @" r, T6 _1 `
- m% [) m/ i! f/ K% C        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5
! j/ d1 [0 V9 O6 v        MOVL ACC,@XAR5                                                ; Move Section Size to ACC" R5 z, ]+ R6 X" N
        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
0 `' S$ h4 a: y8 B    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7
( m+ b2 x1 W1 x1 a: F7 R6 y    LCR  copy                                                        ; Branch to Copy
6 o& G  O: b; H, W    . O& ^. A( `4 B. h& Y' `' F: K$ J
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR59 R; H) F- t" o. }" ]; W% U
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC1 ?2 X1 X/ l, R6 A  `" b
        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
4 ?2 n9 R! C2 A6 P' D. |- f6 i2 R    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR75 z3 O/ k1 {6 X1 k
    LCR  copy                                                        ; Branch to Copy
! A  i: F0 |) P7 e* G
3 t0 ~9 Z5 v, V$ Q: t; g3 Z  J        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5! _; U, s. [  R. ]6 w
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC* e: Q( P; ^! ^( U8 S0 b2 }: e
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR60 h* B) J3 s* A% O8 t
    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
$ E; U" y) T  F( [- D: A# W    LCR  copy                                                        ; Branch to Copy
; `  Q2 ?7 m, N' W  E3 y
! S" y* G4 W8 h$ ?: R$ M        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
! x( B: ]* }% e% X2 y" j        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
6 Y9 a# y" ~6 A/ u- z        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6
8 B( ~+ ^8 B  o4 l1 U    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
$ N/ q8 q' q( `1 U7 M    LCR  copy                                                        ; Branch to Copy3 b1 Q$ U' \, k/ G( \

) F3 R2 u3 l1 }7 O/ T2 d! R        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5
* c% o* d/ V+ Z, g        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
. m+ q/ U) k# }& r        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6
- V& P( q+ U2 |& O7 |  a8 a    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7; n: I' ?# K0 z: k
    LCR  copy                                                        ; Branch to Copy
" E# r( ?7 w, _( [" Y7 ~. u1 w    ' O6 m: V$ P- R
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR53 o6 K7 a. A: ]) n. e0 z6 `; b
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC! A1 f3 [: J, f- e4 g
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6  B& R- `0 R8 }- ^
    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR75 `/ J& Z: m3 f" E5 ?
    LCR  copy                                                        ; Branch to Copy . Z7 L) V7 a( t. ^& S

; ~/ R4 w- n$ o0 ~    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
* ^0 r" j0 ^& P0 s        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
9 K! }% o  V$ I- e6 W6 E7 D+ D        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6
0 D% G, W- `( K    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR79 p* C) ]/ l/ ^5 Y! Q2 ~7 _0 p
    LCR  copy                                                        ; Branch to Copy
/ J! d$ i$ h# p3 D* D4 {! d3 r) k4 L0 {" Q# E% n  N  I: Z$ r/ \
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
9 C) `9 p& d: [6 v3 v) P+ t" @& ?0 b; l' _
copy:        4 t5 [4 {8 L2 e* t
        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)
8 A  H2 F9 b1 T0 D3 i: E
' i& @0 r  ]4 e! O7 z" [    RPT AL                                                                ; Copy Section From Load Address to
1 W3 ?7 u6 ?8 W" a; w    || PWRITE  *XAR7, *XAR6++                        ; Run Address. E: M* X. w$ y
1 p- F7 s+ Z6 I  q/ U
return:; e* A$ q8 V, z7 n0 [& }9 z( ^
        LRETR                                                                ; Return: }: Z2 |2 D! n# V0 J

, y: S% M- n9 c! G. m4 C        .end
6 x! @! K0 y/ ]. z5 M2 S        
& h8 m( I( E' Z. H4 x' \;//===========================================================================* U* w4 I- U* F' W: ]+ @( X
;// End of file.% u. Q+ q0 [  \; a  f" p
;//===========================================================================
4 ~4 o' V6 o/ k- o* m  S9 g复制代码
) b3 O' V9 d7 B' U% Q- _8 m% k2 y& ]3 B
看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。5 M/ i$ ~7 d. b4 [. y) j" @! R$ {
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。4 _; n4 u4 v% j; q( L
这样就完成啦。是不是很简单。! r' P$ R$ T' z* {3 B! o! i

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德( s6 }* `, `; A- ~3 a1 w: @5 G

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩0 i3 X0 _' |' n! P+ t9 I# |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 17:35 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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