找回密码
 注册
查看: 880|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:
' a) \5 l; ]( \' o7 q7 |, T   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */ 4 |5 d% E5 A/ j* t% R
             RUN = RAML6,             PAGE = 1    /* Run section from RAM */
2 x6 i2 U; u+ c: r             LOAD_START(_cinit_loadstart),
) f) |0 a7 {) y0 P2 ?+ T9 c             RUN_START(_cinit_runstart),9 W/ s' ?3 p# T# e7 v" L, @
             SIZE(_cinit_size)
0 C8 i9 K5 ]/ O0 B+ Z- X! @: ^复制代码1 |! u& }3 i, ?
我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
- Y0 o* ^4 D/ c. E* L' f有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。
' m( U: v. a4 X& E/ G( R' {' P那么本文后半部分就讲全部拷贝的方法。
6 [5 f) @; s! K. H( {+ z3 u首先我们来看F2806x_CodeStartBranch.asm这个文件。
9 C; K& ^+ [' E5 i( {& B# p& n***********************************************************************
* k3 I2 K2 @- `; C* Function: codestart section
* [( P- p) s$ |1 I*
! c! ]# G9 H7 l* Description: Branch to code starting point5 {2 ?3 r2 s' S' \5 f- X& O/ [+ {6 D
***********************************************************************8 W, P  y% K. l
6 V3 m5 i5 s% U9 T6 t7 ^# a
    .sect "codestart") ?9 I. R  K4 i6 _' [

: i' x1 B' s: M+ A. b9 ucode_start:
9 t# P/ f& t( \' u    .if WD_DISABLE == 1
% z- r4 }! X0 m' l5 A        LB wd_disable       ;Branch to watchdog disable code7 r8 t) c" a' E  _! J% m/ u% O, u' V0 v
    .else
% S) S- Z0 K6 Y$ m& B' |6 A        LB _c_int00         ;Branch to start of boot.asm in RTS library+ |, b$ H, V% a4 g6 Z  I! D6 W# ^$ B
    .endif2 Y4 j8 n. f& i

$ F  U2 o1 v; D/ _$ e) x! W+ ^2 w+ `;end codestart section
' B$ g8 _" d' ~: |' R" W" x复制代码
$ j' m) I: u/ ZcontrolSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。
) x/ @$ D6 u' V/ y. a9 b) q0 \# q8 C% r
那么我们就把这句话改掉。让他跳转到另一个地方去。' v( c2 K) F0 w/ F
    .sect "codestart"( b6 B% h, f3 a$ L

( V. A* M, }+ t/ s) Jcode_start:+ h0 E+ o  k% b/ f0 i+ B
    .if WD_DISABLE == 1! U3 ?; s: l! @- l2 y. H
        LB wd_disable       ;Branch to watchdog disable code& |; z' ?+ N6 |  |# w- u
    .else
! X% ]4 I7 t7 t9 L$ i        LB copy_sections    ;Branch to copy_sections1 V+ ^7 ^( n7 v% K) t2 L! f; o& J
    .endif$ ^" {5 I$ i: R, U; E
复制代码2 M  a$ [* F, ?7 k" e/ t3 v- V. o
跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm2 M( R- I9 X: N* v; F
;############################################################################
# E8 z7 x/ Q: U! p: r/ ]5 C;
3 j1 W; v" D$ [6 \; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm+ h0 n. V! H' U+ y) h8 G
;5 {5 r- o) E# a6 L" L9 {/ R
; DESCRIPTION:  Provides functionality for copying intialized sections from
0 P# \/ ]# v# |: e3 t4 P5 [  d;                                flash to ram at runtime before entering the _c_int00 startup( b/ j$ M# ^9 c
;                                routine! Q7 L. n8 Y1 M9 K" q( T: z
;############################################################################0 }% J! f* p2 I
; Author: Tim Love8 Y- l$ o6 H* O, x) a6 r$ W
; Release Date: March 2008        
7 q# {9 {9 [2 Z6 b$ T. T3 q2 e;############################################################################+ L& z/ d$ d- @3 S, ]

+ _8 u! @- d! B* j0 k4 I/ {) e7 y1 q' u
        .ref _c_int006 ]# b, }) l2 j7 W0 D0 g
        .global copy_sections
% N0 ?+ g9 x! C+ H5 _$ ?7 B2 W' B2 a- @        .global _cinit_loadstart, _cinit_runstart, _cinit_size
( ]0 d& o: u5 U: Q3 [/ P' g- I        .global _const_loadstart, _const_runstart, _const_size
/ y* {+ {5 k% D% m2 W3 W        .global _econst_loadstart, _econst_runstart, _econst_size
! k9 G( V& U( D) f' H        .global _pinit_loadstart, _pinit_runstart, _pinit_size
3 ]9 _4 c; x& @4 D, R" R7 O1 s! x        .global _switch_loadstart, _switch_runstart, _switch_size1 Z: K  }. `/ _3 |% o7 S
        .global _text_loadstart, _text_runstart, _text_size
2 \- l* B' p2 U! n. R% _        .global _cla_loadstart, _cla_runstart, _cla_size& o' j6 z( B6 a8 f5 W# R" H! x
        ) z- c  ~4 s$ Q1 B
***********************************************************************
1 I5 K( K. h5 z2 d7 E. A* Function: copy_sections: r, _8 T# l3 j; j) n9 q% q
*
) d. X& }( C( g1 A7 J* Description: Copies initialized sections from flash to ram2 j0 K' j/ {  S$ C# C4 m# {, c
***********************************************************************
. V% F; f  m( k& M6 ]9 g- X) g4 N1 f6 w: Y: }
        .sect "copysections"
: V- K7 [6 R; g& p) N( \; N. L+ W
copy_sections:
- i( ~5 a' m( e$ e$ H9 b' A5 {9 h. w
        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5
& k# C( O# z5 l0 t0 B( J3 V5 }, R        MOVL ACC,@XAR5                                                ; Move Section Size to ACC, K8 K  ]8 r( n, g. G- F
        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
8 `3 Y5 A# m4 l6 l8 s* N    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7. Z' m1 t( s3 ^  P, L% Z8 i
    LCR  copy                                                        ; Branch to Copy
; ]4 x5 M9 i6 d) {    $ P+ O  U1 g$ B3 \9 n
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5  d5 |' x9 d0 S- \) @- |1 S
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
2 F0 F, h/ \$ f8 O1 E; W& \+ {2 X        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
9 W3 B& s; H. z    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7
8 @  [4 j+ l! L) z/ n$ F    LCR  copy                                                        ; Branch to Copy' M' c; c0 Z5 H0 R* Q8 |- W

* S/ t3 N5 u- Y% i7 a& n        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
, f, w4 r# }- k5 x        MOVL ACC,@XAR5                                                ; Move Section Size to ACC9 U7 ^% [) M& A3 N+ `) `
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6
  Y7 e2 N* }: z& _    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
1 [/ p; a9 W* R+ M# @    LCR  copy                                                        ; Branch to Copy
5 [. J1 f2 k( U" c& L
1 U5 O4 Q  W+ M' l& X        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
9 S! j" \" F+ X+ [        MOVL ACC,@XAR5                                                ; Move Section Size to ACC, N$ v. p( Y' p0 W" [7 {
        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6
+ `' m8 M6 M) v2 `    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7; }& ?- W* J0 |" i& r& ^+ C! k6 L
    LCR  copy                                                        ; Branch to Copy
* M. b/ W& u0 Q
, W* e5 K8 k( Z7 h: ?, o        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5
  k) X0 q' e' \; A  ?5 m        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
# C7 [6 [  {, O        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6
' f( `! X% A: R0 I: b% @/ x    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7$ @7 _; p3 b" S' ^  p; h' N7 E# s
    LCR  copy                                                        ; Branch to Copy
, B( O/ d* F: l   
! u8 p; j5 P/ L& N7 E5 d1 J           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5
6 o  ~0 n7 I# f) S. f; H4 P        MOVL ACC,@XAR5                                                ; Move Section Size to ACC+ Z6 k# z) U% G' B: M
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6
; y$ j( M6 |) p, c5 x* Q    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR77 F1 h& S' o$ y( i. N9 a5 A6 X: x
    LCR  copy                                                        ; Branch to Copy / A8 c1 ?. Y0 B+ |
4 t  h  ?9 v" k$ ^& u# ?
    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5) M; k9 Y5 j; G3 f, s7 a3 v
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC: r% [0 U9 j- F* u9 q
        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6# m& [$ w! \; R
    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7
0 Z- d- p+ c0 h4 A8 y5 u0 L1 @    LCR  copy                                                        ; Branch to Copy
, E; h' X+ A* V1 [1 K7 `$ ~- z
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
* f* J6 o1 W  L( n0 G/ q- l7 {7 o! ^! }: t( Z" F0 X5 d9 h# I+ {
copy:        $ T3 E; D! Z7 Y! L* `" a
        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)7 _( k% ]" {' m
  W9 \5 D2 n& a7 h  ]% i
    RPT AL                                                                ; Copy Section From Load Address to
- K7 b8 M0 j1 X0 z4 @) Y    || PWRITE  *XAR7, *XAR6++                        ; Run Address
0 L' M, T$ m& Y5 E: q# z* q2 V: w' t
return:1 g1 y( e! s  j/ b
        LRETR                                                                ; Return: z$ p4 G# B& p
5 T! w% N3 z0 `8 }" t- r
        .end
+ O1 A$ t0 Z* l  h        
- M, A4 t4 I( V5 r5 s;//===========================================================================9 Y" c8 `6 m4 D0 d8 T
;// End of file.
8 U, S" {! i* T/ W% |0 A# {;//===========================================================================$ f( E7 b. P6 f6 A2 `" I7 O
复制代码
2 P. G( i6 Z, |' E5 n
+ s% T( z4 }, E' z2 f+ E6 _$ H% G* t看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。9 E0 K) [: M: F5 E2 ~, _  a* C
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。
3 p$ P# v) C+ s0 K3 @这样就完成啦。是不是很简单。
$ l; U# R# m5 \9 q

该用户从未签到

2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德9 J+ X; A6 U( g( W% \6 z! W

该用户从未签到

3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩& f  I. i1 R7 s( M; s! [0 y" G6 J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-3 04:49 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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