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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
# P" F% c2 G) `  F   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
* R& Z/ d2 |! d% ~, d! ?9 T             RUN = RAML6,             PAGE = 1    /* Run section from RAM */
9 E- W# \5 {+ L# a: C0 W             LOAD_START(_cinit_loadstart)," G; [" P0 S$ r& {5 T
             RUN_START(_cinit_runstart),
5 h4 v: S  c# v- K6 ]5 c5 n             SIZE(_cinit_size)) Y% g8 u+ E8 l2 p& {( ^& q9 S
复制代码
9 g; l6 J) a1 W7 c我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。7 w9 \4 c5 K2 L/ [6 h4 B
有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。' _' g* J/ W7 @5 A# ]" p: D: K
那么本文后半部分就讲全部拷贝的方法。$ Z: D$ C' b5 S( t+ N6 ^: f
首先我们来看F2806x_CodeStartBranch.asm这个文件。9 ~9 z  y" t- @+ l
***********************************************************************
* w+ o$ @% W5 L4 V2 T) l: J* Function: codestart section
! S# o8 f) t5 g9 @% e*- t: L' f% @' @4 l
* Description: Branch to code starting point) W7 P' [( Y% [' x2 K% K& h, b3 d
***********************************************************************1 T% Q5 `7 Z( r9 b/ R

9 B, i9 b) Z* x0 M    .sect "codestart"3 t0 \/ p9 c; X, j- w3 v
2 G1 ~8 J4 p: r$ S. `, g4 q: g
code_start:
, r) O  ?, v+ L. X# G    .if WD_DISABLE == 10 @+ {3 B& i- D3 i
        LB wd_disable       ;Branch to watchdog disable code4 p& m5 z7 b8 e6 s- ]3 @
    .else+ Y/ r: d  k- j/ X% T
        LB _c_int00         ;Branch to start of boot.asm in RTS library5 ]- e% \" O( Q" f
    .endif
7 P+ q& e' p7 g- Z( V! u& c# \
; A. I% l, f3 z( V1 w9 j8 O;end codestart section
7 J/ l5 r8 D3 r4 L2 a0 h复制代码
0 L4 s; O  k3 P5 G& v* ~7 |controlSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。
0 d; X7 V' R* e$ h7 Z5 m' j: Y. c; o$ K
那么我们就把这句话改掉。让他跳转到另一个地方去。
2 v2 I+ A' P' Q; N% H6 y    .sect "codestart"
/ ?; S" x5 j/ R. n; x, K* \" V' {3 p' B  n
code_start:/ x3 W$ Z3 k' ]' D% q& v
    .if WD_DISABLE == 1
. ]9 U) e7 I8 U        LB wd_disable       ;Branch to watchdog disable code% ^/ v' |7 u; q- }* e
    .else4 c6 Z, s! Y& N  W
        LB copy_sections    ;Branch to copy_sections
  Z: c5 q, t- G5 j    .endif2 Q0 n8 ?: _% [: K: u
复制代码1 X0 g( U) A( `3 h
跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm* i4 x7 F" N: B* H" T3 z3 Y
;############################################################################/ T% r2 Z' p8 c& p2 I/ I- K8 V5 k- ^
;
3 @' c, Z6 L" ?" Y  ^/ E/ H& K; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm
+ I, z5 ~6 w- ^  Q;
- F* S- X' M' L8 \" w2 `; DESCRIPTION:  Provides functionality for copying intialized sections from ! V& D, x  B) M6 i3 k' x
;                                flash to ram at runtime before entering the _c_int00 startup
, S9 e" U! V" {: s* C) v, W;                                routine7 L, U0 {# x' |% l2 r: s4 I1 `
;############################################################################) J$ L1 P7 g; w
; Author: Tim Love
7 }# w" _$ c% [; @! p$ Y+ f; Release Date: March 2008        
3 K: Y! j8 h$ e! I5 ^3 _; E;############################################################################/ n) Q- X- X9 y+ |
: p9 W1 ]  ?7 U5 r& B
! B7 ?% C6 g% G
        .ref _c_int003 G% e1 t4 P, H$ K% A
        .global copy_sections
2 \) |! D/ a, T- D& L- c        .global _cinit_loadstart, _cinit_runstart, _cinit_size
1 D) X& U) S% V% I6 H% U        .global _const_loadstart, _const_runstart, _const_size
% H% ^+ r; x4 m2 }* e        .global _econst_loadstart, _econst_runstart, _econst_size3 `) R  l) u' [0 f
        .global _pinit_loadstart, _pinit_runstart, _pinit_size2 H. j& t. z% R3 W1 ?, v- C: _0 [
        .global _switch_loadstart, _switch_runstart, _switch_size* n5 C% R0 Q6 G+ E, ]7 O
        .global _text_loadstart, _text_runstart, _text_size
- v8 j# ]' [* H" }3 [        .global _cla_loadstart, _cla_runstart, _cla_size
* m' o8 j& Y( C" L        
7 T% _% {( s- g+ i3 v) A***********************************************************************6 w9 u& r% E) ]: [- b
* Function: copy_sections
8 L  I/ U8 J4 P  i8 r' F3 y*4 Q  u0 y$ t6 w- X
* Description: Copies initialized sections from flash to ram* A. F" h5 J: ~% S
***********************************************************************1 p8 r, [7 m/ v, M! m% F* V
  a4 C8 ?# `6 T# y# N- ?
        .sect "copysections"
' r* g* Q5 I% R& v7 G' }& {" @; J2 ~# F+ ?* l& \0 ]
copy_sections:
/ s: `5 Y. {4 u/ G- k$ d* u  X
        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5
* h, _6 X  I& X) _! }        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
$ ?* L8 g7 h/ {2 A        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6# @0 B7 F- M8 c( P+ |5 b5 V; ]* [
    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7" t2 |4 l1 P7 ]! v
    LCR  copy                                                        ; Branch to Copy
1 u! _8 E' r4 a( J% i3 Z    % K& k. T* s) q6 f9 f* x
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5
1 p* x1 B; g$ z* m) M- z4 y9 Z! \        MOVL ACC,@XAR5                                                ; Move Section Size to ACC: S2 L1 Y/ n2 }/ y9 O9 Y. F
        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
5 C8 D" ^, Z( i) @1 x1 G8 r    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7) U0 m, i' i+ I! P/ T- Z
    LCR  copy                                                        ; Branch to Copy
" [' x; Q, I- s" ~* H* F- n) Y  _0 W3 R9 t, i! Z' F7 R! |% @; Z
        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
1 y+ g7 j) }" I$ X$ e        MOVL ACC,@XAR5                                                ; Move Section Size to ACC1 T7 Z: u, Y& z. u; E; r
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6
* d, S/ f1 i6 Y3 y2 L1 X    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7% w9 E: `0 C# J& S# N
    LCR  copy                                                        ; Branch to Copy 0 p$ e8 U$ Q, E/ J+ q( L
! ~2 ?+ F! U& p* k. }/ Y
        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
4 t8 E. O. F' x$ j        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
, o) Q# r. n+ g6 I1 q: q# u        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR63 [+ K1 {" T& Z1 V: i% b4 h
    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
7 c6 S' T6 \, l8 E* w# K% e2 d$ S3 r    LCR  copy                                                        ; Branch to Copy2 y( C- {( s; E* [6 @7 U

0 `% H1 u1 R2 ^% l# `% v' j( F        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5
$ Y# t6 C: \0 J: N        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
8 l; G- Q' L% ?& }2 N8 b. ?        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6
$ a& j# q* ]0 A, b) X4 F% T! V2 ]: \    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7" n3 k' b$ v0 j
    LCR  copy                                                        ; Branch to Copy
. H* r/ b% B$ m$ H7 E    0 R1 ?; a# n( P+ A. q6 X/ u- Z
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5# f) H2 j# n% n% W
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
9 r$ f! d& {% ]" l6 g- S" G        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6) v6 k& d# ~; t, D3 j" g
    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR7, a, x/ y+ N# o/ S* P
    LCR  copy                                                        ; Branch to Copy : h' j5 j6 @  U: h+ n

* T: z; q: L# M/ k/ m    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
2 M; }; b) R& T# [' [        MOVL ACC,@XAR5                                                ; Move Section Size to ACC  b2 w  v4 U9 b6 f' u* t) U
        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6! s2 d4 f, [3 e, f
    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7
- C/ |: f+ z' p7 H" Q    LCR  copy                                                        ; Branch to Copy
9 E' P" C' n9 p
: k. v( o0 X6 L8 O4 n    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
' c2 j6 a8 C$ E7 M
/ n& R# k& Z& Z- x# zcopy:        ' y2 v4 [3 n& H( N# h' O$ X6 T
        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)
5 ^& P& ^  k8 l' s; l: I  s* O# U% n$ H* Z/ l: u
    RPT AL                                                                ; Copy Section From Load Address to
8 G- ~; D) r1 j9 t: a. W    || PWRITE  *XAR7, *XAR6++                        ; Run Address
4 W. M6 @4 A2 V/ E' t7 i
, w3 A4 z+ v% M, |2 L# b  Wreturn:
! _/ A) s' D- C( u6 h        LRETR                                                                ; Return
/ N- H( C  M5 j0 U9 e1 [  S: f/ R' h# |- j
        .end
- K# ~9 F$ g5 Y8 E        1 p3 A. w% S8 i. P: Y8 T
;//===========================================================================( D/ Q2 H+ K  m! A. h+ |
;// End of file.) p, ~& h, Y3 N% k6 F3 {
;//===========================================================================2 J8 d4 }% Y. o! P# j8 b0 [
复制代码
3 h; T( t1 H9 b) {* L, M+ B: O$ b9 U5 J: b& N8 O- x# r
看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。
8 T8 u6 w2 |$ {8 s% e然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。
/ E3 y" N9 Q( C1 U2 L; O' J这样就完成啦。是不是很简单。
- E3 l  P$ I  \8 a

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德9 y/ A7 [7 c, Q. i& m# x

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩
3 T$ k! B8 K1 Y6 u) C  j9 Z4 H0 B& w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 09:20 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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