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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
: ]9 N0 B5 {( J: J   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
- F0 H; U5 u  T. L+ Z             RUN = RAML6,             PAGE = 1    /* Run section from RAM *// E% [/ ]9 u" j9 c" H
             LOAD_START(_cinit_loadstart),
7 D& l, ^0 ~( _7 S& q) f             RUN_START(_cinit_runstart),7 A- u. n% j7 r; h% S
             SIZE(_cinit_size)
, ]/ P9 h4 N1 G, ^8 f6 q复制代码! ^6 t% K+ e1 ^, I
我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
  J) K& I2 \5 u2 {% B& l; K- c有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。# i- V# z5 s) g1 W
那么本文后半部分就讲全部拷贝的方法。
8 u: b" k) N+ ^0 t6 H首先我们来看F2806x_CodeStartBranch.asm这个文件。
1 E+ X# H* R& a+ {# j***********************************************************************" y/ c/ ]4 k1 z
* Function: codestart section) u, u; [" n8 y/ n9 w9 t
** X4 A6 P) {. O3 H: H1 R
* Description: Branch to code starting point
3 t6 J2 t# R. v+ i; W1 e: ^# [$ A***********************************************************************- n) o& B1 {* `
( b, C; Q" L& Q4 a6 z
    .sect "codestart"
$ U5 _+ y4 F+ U4 S# K
+ n! {$ B6 V- f6 o6 Gcode_start:
/ X. X; u3 v' `$ Q8 e/ m7 j' [- G    .if WD_DISABLE == 1! f& s: C# `+ x1 y; v
        LB wd_disable       ;Branch to watchdog disable code, K1 Q' T9 L" m5 |' X
    .else" _! q7 {4 f0 {8 j
        LB _c_int00         ;Branch to start of boot.asm in RTS library( N, E- J) N$ h; j8 S8 s
    .endif9 G( \& {9 K/ q3 p: F5 _
" x. p' \" w2 G- e' i$ G
;end codestart section
" E$ x+ h  V5 U, K5 f2 d复制代码
3 U8 |4 _5 k0 Q: U* x: ~$ scontrolSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。7 m, [9 Y) Z% X2 ]9 V& K( Y
/ `6 w4 ?  y. m$ k
那么我们就把这句话改掉。让他跳转到另一个地方去。
* S- p' v0 G. |8 E1 i    .sect "codestart"# w7 g% \* \9 o* b( E
4 J8 D" ?' N4 C" ]
code_start:, X; L( o! O3 P/ j  D
    .if WD_DISABLE == 1
- z: Y5 E% z* g' c! [" Q+ \. _        LB wd_disable       ;Branch to watchdog disable code
3 p2 ^! E8 r+ x  O" Q    .else. c7 q+ _6 f% a2 h0 l
        LB copy_sections    ;Branch to copy_sections: g0 a" R; ~) y! A; W3 M5 I# U, h
    .endif
+ Q) j9 m1 V6 Q复制代码$ w9 j& k5 U5 c+ a7 M: l3 ]$ ~
跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm( l% F) o5 ~1 q* f5 t
;############################################################################) E+ `6 U* x0 m+ u
;5 U5 s1 U) Z* W( t- l! q* j6 I
; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm9 @% ~7 n5 O+ v" J
;
: `% n, r" I" z# ~" P, v9 X8 I! p; DESCRIPTION:  Provides functionality for copying intialized sections from
4 C# y& F! I8 ^, z" C7 E- k;                                flash to ram at runtime before entering the _c_int00 startup
: b$ k: j5 z; d- r/ u- U' S) u;                                routine
( Z) O/ ~+ ^( Y( e1 @% L, M# r8 t;############################################################################
# A6 i9 ], _( X0 Q; Author: Tim Love6 l0 V7 ~. V7 B5 u
; Release Date: March 2008        
$ d9 T# Y( q9 @;############################################################################% k; G7 k- ]- R6 H* i  V

4 d0 U5 n. \# |; w, n2 |  c$ y% {1 e, ~; {8 A, ]! W6 N
        .ref _c_int000 `6 c3 @$ J& T- \3 O
        .global copy_sections
. W/ E/ p" r2 \2 P        .global _cinit_loadstart, _cinit_runstart, _cinit_size; ~5 P% }8 T" z) ^
        .global _const_loadstart, _const_runstart, _const_size
7 ]9 c# F2 \. h9 A1 ^5 m' b        .global _econst_loadstart, _econst_runstart, _econst_size
- r) N3 {& f* F, F6 T6 I        .global _pinit_loadstart, _pinit_runstart, _pinit_size# `  c" ^, k. s. q5 R
        .global _switch_loadstart, _switch_runstart, _switch_size7 R/ v/ a% o2 ^& Y; c1 l
        .global _text_loadstart, _text_runstart, _text_size* ]1 d. B# [* V2 }$ h4 l9 g9 u* H
        .global _cla_loadstart, _cla_runstart, _cla_size6 P. D- X  |1 S
        
6 N4 U+ N, P, m***********************************************************************. @: q: R/ r# ]
* Function: copy_sections
, `- T* a5 `' K% B4 p*% h; k3 d5 L5 J4 I( B8 \
* Description: Copies initialized sections from flash to ram: n! W2 G0 ]# x7 v; B
***********************************************************************
# h8 q4 r' i* W9 `* ~2 e
- J/ K( m: {% Y4 W# c: i# v+ ?& \        .sect "copysections"
! }" `7 e. S- g( h# @1 k* a$ e
$ V3 A; \$ P( d( F/ V+ Fcopy_sections:
) x$ [9 c% K8 P
" A- w$ m+ V7 W' ?1 u: `$ T        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5. s( i5 n2 ~3 [+ ]; g! E
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC+ a) H( P$ h2 D5 u6 h" s
        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
6 p$ P# O2 G8 A/ ]8 D% k; u# N    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7
9 o, D3 W/ O6 q4 s6 Y; S    LCR  copy                                                        ; Branch to Copy
+ f) ~/ y$ |* k7 S% [) w/ P    1 r- X8 N5 E( ~" ~# t
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5
: S. N: b! t) e        MOVL ACC,@XAR5                                                ; Move Section Size to ACC# q9 D7 V6 n1 ^  ?9 [
        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
  G" u; y/ ^" P    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7
( C( d# s; w3 n/ m    LCR  copy                                                        ; Branch to Copy
5 j: u6 }9 m& [6 k- T! a/ M6 V6 Y1 c$ ?% @7 ?3 T5 l
        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR58 x0 l7 J( O; S& ]3 I1 k
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC; F+ i3 W# ?; {: x3 D" J* v% m/ Y
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6; S! V  Y1 [4 j2 c* U
    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR71 f# I2 \+ i9 z! K4 S4 ~
    LCR  copy                                                        ; Branch to Copy
+ w* n& ?+ E. b; n6 ~; T8 A; g7 C" u" N, r
        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
0 U+ l# z$ [( P/ @$ f* O0 m9 M        MOVL ACC,@XAR5                                                ; Move Section Size to ACC# t& [0 I, \2 m) p7 i
        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6
, a. b9 J7 X2 P7 O: B, U! q    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
) A" E$ h& ?# X* w4 ?+ `    LCR  copy                                                        ; Branch to Copy/ P2 }7 c: r* ~$ X& j
9 R* C) D8 N* e; p. o1 }6 `
        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5( g! V8 j9 j, Z: g9 H  i
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC  B! d. o5 Z/ x
        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6
9 [6 a( X6 s: {    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR77 B0 M, P  }0 S" [7 e; ~. l
    LCR  copy                                                        ; Branch to Copy) X+ m4 f% f1 a) s
    4 w+ e& y  M6 r% n7 \
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5! _7 X& i" m7 u# C# c$ S/ }; d
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC. t; S% |6 Z& F' A
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6# N+ _" j2 ?# b! n% g% y( ~% K
    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR7
. D0 q' j; ~; j/ G1 }) k: y2 ?    LCR  copy                                                        ; Branch to Copy 4 ~4 ~& A2 w- T  _6 O  }' E& T
* e9 ]2 c+ n8 c- W! J& K  ~
    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
; S  b# T" G/ Y& J: \* K$ u+ d        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
+ f# t' U0 B% P4 P) n        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6  Z5 b5 _6 k$ _! u+ N
    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7" v* N- k+ w$ L7 }% X
    LCR  copy                                                        ; Branch to Copy+ f8 g- ~' K0 Z" y! e# \- a
- @) Y/ Y8 a6 U; H# V. _5 I. j% Y# G
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
' V; ], e$ s+ Y, G+ c  P4 @* a2 C3 Z! `# n' i
copy:        
% N; A: c6 G. K        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)
, z- v, }) y0 Z+ R" L# i, \
0 U% K" G# ]  y    RPT AL                                                                ; Copy Section From Load Address to
. t, N0 [) M! o    || PWRITE  *XAR7, *XAR6++                        ; Run Address
, i, F" j* k  w: g/ }! c+ B8 ?4 U1 q' b& E4 r8 [6 g
return:
7 E: l9 t+ D3 d* W$ T) }; {        LRETR                                                                ; Return
2 T! r6 M6 c, ?# }1 m; x7 M
1 Q# g4 C* A7 p' Q2 q1 D$ z" X        .end
9 t) t5 \7 _* c. }$ Z: T  N# O        
+ M0 ?6 B  N; M: X;//===========================================================================! U# R+ X5 u* f3 K+ h
;// End of file.  i0 j  ?3 L& i5 J
;//===========================================================================$ n/ i$ c  E' v: X( v6 v  b
复制代码
/ r: g  p4 H- k0 d8 G
: D# P; k4 b6 A# |' }$ A看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。& w4 L6 e/ Y! {& r3 S; L
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。, }/ o2 s* r) G' b2 M' ?
这样就完成啦。是不是很简单。$ ]+ p6 [( C0 M4 A# B4 \8 H2 ^7 v

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德0 q7 q7 D- z* r$ d5 x

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩/ V! ~5 t  D# O; U7 y4 J1 @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 13:53 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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