找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 123|回复: 2
打印 上一主题 下一主题

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

[复制链接]

211

主题

652

帖子

1507

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x
首先每个数据段的存放位置,以及运行位置都是在cmd文件里面存放控制的。例如下面一段:* T/ p/ J  n; {6 T# S$ E
   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
2 h" q# s3 Y% H  n2 }             RUN = RAML6,             PAGE = 1    /* Run section from RAM */+ x* I: N9 C4 X% v
             LOAD_START(_cinit_loadstart),5 V& G* x( o! E& Q# C
             RUN_START(_cinit_runstart),6 h2 P3 h& `% h& r
             SIZE(_cinit_size)
6 U' T9 r% l  U; F0 y" O( \复制代码8 n0 N0 e) S6 S+ K" L& D
我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。
  {: y, T$ S9 z' j+ `有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。
, I' K* [' m, Q那么本文后半部分就讲全部拷贝的方法。
/ _" U  y( w* e3 o) ?! ^. ^首先我们来看F2806x_CodeStartBranch.asm这个文件。' j7 Z* r- O, |8 O
***********************************************************************
% w: C( J6 a# E/ J1 z/ D, ]* Function: codestart section
2 W2 q0 V( o9 l! _: a*
# t9 [' m  z% L0 c* Description: Branch to code starting point% B) Q0 a$ s8 Q- x
***********************************************************************
, O  f! W: ]5 W# u
$ S, [  U& O% }" h$ g7 q    .sect "codestart"
: c3 j6 i0 Q8 K+ a% `) L+ B* [1 v1 e
code_start:/ u1 M( E( B  S. w8 p
    .if WD_DISABLE == 1
( x: U5 F( F3 [8 n2 k  i! G        LB wd_disable       ;Branch to watchdog disable code
- a6 K% \; H8 S$ E5 H# Y; c: N    .else0 f! S" N! j+ q  a' w7 _4 X+ l
        LB _c_int00         ;Branch to start of boot.asm in RTS library2 c) [% ]5 a6 i
    .endif& j- z4 h( _( W7 X% ]
8 q4 I& E' k9 |7 [& J) k
;end codestart section0 I) C4 F& ]$ X. \, D* m# ~8 n0 h) n
复制代码8 T: j$ A( t! \
controlSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。7 v* t. K- Z8 C) y- W
' V1 K& @6 o  c. z
那么我们就把这句话改掉。让他跳转到另一个地方去。
* i3 U: H- F# k2 X    .sect "codestart"3 `2 }. c0 B8 D! {5 X
4 f6 B$ a3 M! ?* t# ^
code_start:! _* x6 }& l8 }2 B( P
    .if WD_DISABLE == 1; M5 f7 A0 K3 T- {' z; ^$ J
        LB wd_disable       ;Branch to watchdog disable code8 b( m8 f1 o* C! l6 ?6 t/ P
    .else
3 y9 Y+ Q; k  M" T        LB copy_sections    ;Branch to copy_sections+ L1 w' _9 S( K: Z% K. \/ ~
    .endif
/ {( S/ W. B" o2 g' s" B' T复制代码
( ~8 U4 ^5 u8 L5 o跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm3 L8 A' c$ ^1 m5 C6 ^6 v
;############################################################################
0 O5 T5 K8 V! K5 v8 \; V1 J* {;
0 [7 m+ b" D- {5 o' u# U' Y' s; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm
3 c/ w4 e. F$ c3 n" t) };7 X+ A0 `1 h5 @- _' b
; DESCRIPTION:  Provides functionality for copying intialized sections from
2 @4 S  m8 _7 a  i9 o# M5 |;                                flash to ram at runtime before entering the _c_int00 startup
) E% B+ Y  n6 ~* H. j4 x2 p7 w% L;                                routine3 Y1 R: O0 B, {! _) @
;############################################################################
. u2 Z8 l9 J  B! i! U: p. r; Author: Tim Love; k5 j  G- |0 ^' G1 ?
; Release Date: March 2008        * |$ U' Z6 j) @: s
;############################################################################; t; n; V' E8 g5 ^' S7 k

2 N3 n( p1 m4 G9 e1 Q* U( c7 e) N( m; x' D' u( h& h( m
        .ref _c_int00  z! J8 Y4 ?7 ]5 T
        .global copy_sections/ M9 [6 |; o6 r; c, c9 x
        .global _cinit_loadstart, _cinit_runstart, _cinit_size2 W8 A( l! C2 J* m
        .global _const_loadstart, _const_runstart, _const_size5 X. f! U6 S* E
        .global _econst_loadstart, _econst_runstart, _econst_size
* ]  a( u4 L( ?+ Y        .global _pinit_loadstart, _pinit_runstart, _pinit_size
3 j. L9 Y, }5 R2 T/ h0 X) Q) r. p) A0 _        .global _switch_loadstart, _switch_runstart, _switch_size6 b2 W. _  F- M; v" c
        .global _text_loadstart, _text_runstart, _text_size
' L& p9 G6 r  q& s        .global _cla_loadstart, _cla_runstart, _cla_size
7 S" S( w5 X: v        
4 W. f+ g% D& I* N  A***********************************************************************
/ b6 }8 i! l- v* N% @9 A* Function: copy_sections
0 j. F/ T0 h! G0 f0 g4 C*
, O) `6 a1 C8 u5 ^* Description: Copies initialized sections from flash to ram" c4 T3 L4 Z* _0 ]
***********************************************************************. [- z1 K, V, ~7 W% u8 T

. L8 l3 [( J% q  A        .sect "copysections"4 v: ~$ g) I. u8 u) U
4 G+ R" E9 B' ?& {8 v" ]& K$ k
copy_sections:# R* C! X( ^3 k. {4 I* K9 ~$ {
; Z9 H3 I# ]' ~& O- U
        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5
& v  r2 a1 h: _$ N9 B! U        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
- S; E# J# N2 Z: g( h% q# P        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR6
  F7 ^% q0 p  e( S9 P& q    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7  }4 n5 U# p2 b) Y
    LCR  copy                                                        ; Branch to Copy) Y' `' [6 j+ N1 W  x
    ! q% P8 n6 t0 _
        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5; m. m$ C9 I, h, _; W8 r3 s
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
* `2 }& P5 w( T2 b2 p6 L" W        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6) t0 ^8 g$ E" W" [$ M8 N0 w) H
    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR70 [& c' u4 F  y$ _) N( N/ ^5 Y1 |
    LCR  copy                                                        ; Branch to Copy
: M/ L/ P9 b! A5 ~: k* ?" i1 i  i: Y" Q! Q, z
        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5+ M. h5 W: R1 \9 U
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC2 V- R6 J+ W/ W- X% H  t- P
        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6
0 R4 L' ]) R' `9 x2 Y5 n- B2 ^& X; I* I    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
$ U' f( o! E! `2 T6 w    LCR  copy                                                        ; Branch to Copy 4 q2 \7 Q* J5 z( a

! L; c4 \9 H/ d. V" H' V" M        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR5
+ c8 z# j0 u" X' \        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
  h0 q6 ^5 O- w* J3 E/ J6 [+ N        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6
0 v/ \# f# S) \+ t+ `* S    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
- Y3 R8 V$ \, h6 R/ V1 U2 `2 K    LCR  copy                                                        ; Branch to Copy
. }" n4 T. ~/ {0 P& O5 `9 T; Z8 M  y, ]. W2 ^( ~
        MOVL XAR5,#_text_size                                ; Store Section Size in XAR5
; Z; C4 ^1 _; Y$ I2 v        MOVL ACC,@XAR5                                                ; Move Section Size to ACC. m8 P' Y5 e$ [' f. q% z- T
        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR67 y+ a0 j, R: t9 H4 M8 O
    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7
% t( @% d- A" r* p, e6 N0 C    LCR  copy                                                        ; Branch to Copy2 Z! V& t0 K$ K  ^0 A1 X
   
' a9 f9 o8 o) u- D8 k# m% ?) p           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5) j; L0 Z  M/ w
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC) f1 C2 ]& T! n3 W- p0 N% W
        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6
, p: m. l2 S% o1 K( J  z, r    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR75 M7 C  e- y$ i) d( Z8 t. B2 i
    LCR  copy                                                        ; Branch to Copy # {" h1 D* _& J; y8 g2 A1 p
) i; J: f8 L  H
    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
) O  U5 R0 x) v3 {; r" ]1 w( h# n        MOVL ACC,@XAR5                                                ; Move Section Size to ACC# y, B* k& c, r8 o
        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6- L& t/ {0 H, m# r+ c6 `+ M
    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7' w9 E! u; d: ?6 U# t) f
    LCR  copy                                                        ; Branch to Copy9 K0 I3 n% k1 N# a; D) O
- c. |& d: D( t/ B3 r
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
  r" Q- c1 D+ B4 t, L5 C
' X: g) o1 e' p' ncopy:        , i+ |; N/ M, }& c- n( O* J0 t! E$ a$ B
        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)
; @& Q/ _1 T8 W0 t) ?  ?2 M
+ d1 C# Z* A, Q& k- j9 H    RPT AL                                                                ; Copy Section From Load Address to( s% Y1 _( Y6 a* g$ f9 j
    || PWRITE  *XAR7, *XAR6++                        ; Run Address
2 X( q. u0 n7 U- l. K/ B2 m+ p6 y
* [2 _% v; n$ B- ]' l5 y) ]0 \return:
3 N6 |+ y9 M  z& y( c# H8 j        LRETR                                                                ; Return
2 C( ?3 d# F8 ?% C8 t, Q# r/ H- n0 X7 E8 h6 w8 w
        .end9 @% O" o( s+ p# ^3 U2 V
        + ^8 B! y' s+ p. {* O/ l
;//===========================================================================6 h$ n' l7 E" {3 ]
;// End of file.; _& [& A$ A3 }0 ~! u& ^, r
;//===========================================================================
& W: h/ `1 o1 \3 d2 A& ~2 {0 B* l复制代码
. S- A: v4 T( w2 S. M
% C4 \  N1 C. Q5 N看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。  Q  L. j4 r; t6 B/ G6 D
然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。
5 n, J# p# h) M这样就完成啦。是不是很简单。
/ U- c- \* V1 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

211

主题

652

帖子

1507

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1507
2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德
' x. \% f& Q! S! v

157

主题

597

帖子

1239

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1239
3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩
. e; o. O/ c! u. z: K/ Z$ G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-25 07:11 , Processed in 0.054565 second(s), 32 queries , Gzip On.

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

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

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