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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:5 ^( d6 f+ ~. q5 A
   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
2 N. I7 Z9 q- W$ _             RUN = RAML6,             PAGE = 1    /* Run section from RAM */
5 u$ ~- r1 \! Y1 f& X             LOAD_START(_cinit_loadstart),
; }+ ^# A2 W, o  T! }/ a0 Q' i             RUN_START(_cinit_runstart),, \9 A2 D/ [* @, M( i  \- M
             SIZE(_cinit_size)
- Q9 N  o& l5 ~# }5 {复制代码
4 q) O6 w5 F$ o, j$ e我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
8 Y  f) \- B/ _+ X) J有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。% G) J# M* Q2 s- A+ I/ \* F5 Z
那么本文后半部分就讲全部拷贝的方法。
0 D( `4 j4 b  g0 e5 S首先我们来看F2806x_CodeStartBranch.asm这个文件。
' Z7 h/ p5 K- x, `# s( }6 @1 ?***********************************************************************
0 ?" d, f7 P3 D# P, _8 {* Function: codestart section
) c- i( h  ]7 U; A: W. @  d*1 M) O9 F$ t( v6 Q
* Description: Branch to code starting point& {9 a. @5 g. }5 b4 y" k
***********************************************************************3 t& {, O/ d# D' Q; E- _' y) `, a
7 S/ `5 k0 {. z0 g/ C- d
    .sect "codestart"
2 i0 W$ m! l1 p: t4 t) t
1 o; j( l) n$ u  `code_start:3 U8 b, b- J& |/ z) v: T
    .if WD_DISABLE == 1" V4 b+ K8 _; b  K6 S6 h4 X
        LB wd_disable       ;Branch to watchdog disable code
$ I, h  |7 Y% ]2 Q. A; }2 h! G    .else4 ?8 C9 E2 u7 ?" P4 h: K6 G( ]
        LB _c_int00         ;Branch to start of boot.asm in RTS library
0 F- k; K0 t7 p1 h    .endif& {& y7 \/ j9 H9 T

- r9 a! [# ^4 F  r6 m" |0 \1 P;end codestart section& L) i) J) Y! `0 w' y( T& z0 a6 g
复制代码
/ }* s+ h1 |- b  W; ]$ N  {0 l$ h3 p3 ncontrolSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。
( e5 l$ s4 v' U, l
  i: g3 L7 G9 x那么我们就把这句话改掉。让他跳转到另一个地方去。
" a) Y  v9 y, E; G0 B    .sect "codestart"2 t; p, R+ p+ k5 `' i9 a. L2 {- Q) Z
0 ~7 c( }5 l& `6 U, J) I
code_start:
  M& o( E, c9 j$ D    .if WD_DISABLE == 10 L- V0 t/ N2 l- {6 F8 M; ~
        LB wd_disable       ;Branch to watchdog disable code: q& y$ ~: ]+ D
    .else
5 }, v, n5 r) }% C2 e        LB copy_sections    ;Branch to copy_sections( z! E& R7 L8 h& u) \: t
    .endif
; \/ I7 a& ^( Q+ s# Q, |- y* o: B. V复制代码5 b7 q) b) V# l. _3 P
跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm
: m+ Z4 W; d0 H4 b. F9 E;############################################################################
6 `6 \1 a5 w1 C4 s;
9 M' E3 \3 ~8 `2 c$ `8 x+ b5 k4 a; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm
$ t8 ~& i$ d  C;( A) @0 ~* y3 p7 J3 `, Y9 B( k: S
; DESCRIPTION:  Provides functionality for copying intialized sections from
0 S  |$ w# ]) H8 y9 \# g2 p. ?;                                flash to ram at runtime before entering the _c_int00 startup  ]; @; H  z) L- Y1 L* b+ E1 t/ J, U
;                                routine/ {, A( A7 T9 N* A: o- c
;############################################################################
( H2 }$ I' l5 j+ J5 i; q4 S) g9 A; Author: Tim Love
$ e( |1 Y' O* n; Release Date: March 2008        
+ y1 E/ A& D9 S; ^# H2 B5 o0 I' u;############################################################################$ ?. o6 b, A% s2 d4 b

6 {; t2 J2 u# x- x) {/ X8 x1 c$ j' {' _1 C
        .ref _c_int00
% f' B! u9 H+ ~0 e        .global copy_sections
* |4 W( G7 N: e* ~' G* B        .global _cinit_loadstart, _cinit_runstart, _cinit_size% y; n& ^. n; l9 f/ X+ Z
        .global _const_loadstart, _const_runstart, _const_size
4 a, ^' |. h9 N; a9 \' e  v        .global _econst_loadstart, _econst_runstart, _econst_size
8 ?+ [  C& v/ J. L        .global _pinit_loadstart, _pinit_runstart, _pinit_size2 [, b: p. y1 w" A% C% |
        .global _switch_loadstart, _switch_runstart, _switch_size# K9 I8 A  n5 \/ y8 h6 r
        .global _text_loadstart, _text_runstart, _text_size
* `- X, u8 V8 L5 j        .global _cla_loadstart, _cla_runstart, _cla_size
. z/ _' X0 e, d: Q  C0 a        
: b3 D! C6 f. Z8 y, o***********************************************************************
* _3 C  g6 x$ }. [  N5 y+ h* Function: copy_sections
) X$ e$ d( |) k' q% M*
# U5 ~; H' @3 w& m8 P9 A  y: q- H* Description: Copies initialized sections from flash to ram
! `) a  @6 \5 {/ ]5 B************************************************************************ t- H5 h) Q% D5 j5 p

- o5 s, E: C9 M/ n0 @        .sect "copysections"
( U9 U9 b2 F* B5 l# o2 E) P. L0 ~7 f( a" s( S; K
copy_sections:
) S( h  j; E7 u. u8 p
+ ~* y) C, Q% u* t% l        MOVL XAR5,#_const_size                                ; Store Section Size in XAR55 _. Y' u; N3 f, e
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
) K' _" e% T/ W- m, ?        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
$ w- P- R) I; B& X8 J& S- ~, I0 m    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7  V; D. Z8 R0 L/ X/ H
    LCR  copy                                                        ; Branch to Copy
$ D$ d& N& \# h  W7 P   
9 o8 e% k% M, W- N# G& [/ K* ^, \        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5
- o" u! M' F; Y6 Z1 A        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
7 Z: i; o6 i; ]0 ?) n        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR60 n4 J% T+ ~, R2 |
    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7
5 Z" e. U! p' T2 q) V! v5 V& J5 P9 T( I    LCR  copy                                                        ; Branch to Copy
- P# ^3 _# k/ F; Q# c4 Q8 _4 l! }. q
        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
* L4 J& m3 O6 C# O' F        MOVL ACC,@XAR5                                                ; Move Section Size to ACC% i; c3 r. z' q  l8 c
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6& M4 a1 t% ^  x% D+ W4 b
    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
3 N" X/ m7 W0 m7 q, O    LCR  copy                                                        ; Branch to Copy
; [2 w( U0 D: T
+ |. ^, ]6 |- R; {        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
/ V: Q: K5 p, \- Q) U& X        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
+ J- l) w4 I5 K1 g" T" y' e6 J" a        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR62 n$ `2 m( i! j% Z# s5 c
    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7" D; x/ P& @6 e. C# d( ~# M
    LCR  copy                                                        ; Branch to Copy
% W  \- c( n0 X$ f3 f3 s! a
$ k( {9 o' Y- B4 ?5 z0 u        MOVL XAR5,#_text_size                                ; Store Section Size in XAR50 [/ _! }) P# x& w
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
8 f" @+ |' U: f2 g' ~# M& a        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6
6 p! I. \1 ~& ^. D' V  W    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7
+ ?" P$ o1 C, m9 |, i5 s& Y% e    LCR  copy                                                        ; Branch to Copy/ L2 T6 y1 `( z' q
   
8 d+ P! w& V3 L& ]           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5
: G( x- ^3 e- X% C. A        MOVL ACC,@XAR5                                                ; Move Section Size to ACC- t0 i. L$ e, o. B2 f
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6
  S. c6 P) I, [& F$ q1 v5 e1 ^- G    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR7
, y9 b4 v$ u0 ?+ Y% z# {    LCR  copy                                                        ; Branch to Copy
7 h% A' v0 ~* Y! K0 w% z6 _$ R6 k
/ A/ Z; s2 h. @) T2 N1 O    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
" |9 v& j. }& E$ V& ?        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
* d* ^2 a8 H) \- }        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6
% P$ ?7 S* `. I1 M4 V' t5 F    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7% y* A7 p% d1 |" h+ r% y+ [- {
    LCR  copy                                                        ; Branch to Copy
/ M& Q& V5 N# F; F, M5 Y6 j2 H
; v: b/ ^2 L6 k& Y4 Z$ \5 o* h    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
: n* I) n: p0 ?1 O5 A/ \$ A" [7 q' W
copy:        
) f/ R$ R4 K' T; R        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)3 B# ]! k0 }/ L0 z) z5 v

$ W' M; J, g; g  f9 ?/ Z    RPT AL                                                                ; Copy Section From Load Address to( G, b5 s) G6 l! m
    || PWRITE  *XAR7, *XAR6++                        ; Run Address6 |! W* O" w( N- ]

5 U" j8 m' o  Zreturn:! `" v- P& P( R" s% |  x
        LRETR                                                                ; Return
/ o! w, O0 ?# W6 I  N* V/ ~
% |/ Q1 U( A/ j) z' b        .end3 M: r2 c0 m) N4 G
        $ \/ Y2 w1 ]- W% {8 N% H
;//===========================================================================' `6 l. n1 t% C7 k+ n
;// End of file.
' n& q7 s, S1 r4 T1 ~4 i% L;//===========================================================================
, N, j. F/ x3 R$ J3 r+ F复制代码6 }3 X2 A6 `* [$ H3 G
' C9 D$ `  L% V4 u+ @6 F
看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。
* U: B& Y# r* r4 _9 P然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。. r; H$ F2 S. {- N
这样就完成啦。是不是很简单。9 Y3 I7 C- d6 _/ U

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德0 D5 A2 n2 R8 Q# `

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩
7 ~. J! X3 m4 s! b8 ~# }! u4 p  _1 y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 17:25 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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