找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 118|回复: 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文件里面存放控制的。例如下面一段:
! x. q4 I+ j: y! d6 S" o   .cinit                        :        LOAD = FLASHC,        PAGE = 0        /* Load section to Flash */
8 b0 H8 P6 u9 f0 T# a" B9 b+ _             RUN = RAML6,             PAGE = 1    /* Run section from RAM */
5 v. I3 ]8 y& M2 ~, l' W& ~             LOAD_START(_cinit_loadstart),6 ~( b1 t2 l& K( V. n2 o
             RUN_START(_cinit_runstart),9 V, p8 J! ]7 U. z; y  x/ S
             SIZE(_cinit_size)9 p0 r- ~- S4 `( ~' G7 C; z" e
复制代码
1 n% |; e/ f* k* B5 f我们就可以看到.cinit这个段。存放在flashC段里。运行的会把函数拷贝到RAML6段里来运行。后面的三行表示存储的起始位置,运行的起始位置,以及该函数的长度。4 o4 q6 f+ [6 @+ B
有了这些就够了。如果不能保证DSP在下载程序后不会掉电,那么程序就要烧写在flash里。运行的时候呢。要么就拷贝到RAM里,要么就直接在flash里面跑。拷贝到RAM里又要看你程序会不会比较大,可以只拷贝一部分还是全部都拷进去。
1 G) h4 b/ U& p0 c那么本文后半部分就讲全部拷贝的方法。: p7 `; o* g. D. z/ X
首先我们来看F2806x_CodeStartBranch.asm这个文件。" n1 a4 T; _. T
***********************************************************************
8 t/ ]  p% `6 S* I* Function: codestart section& p/ E3 g) ]# Z0 ]
*7 Z* m* `) [1 O% g
* Description: Branch to code starting point% J% O" t8 ]9 M3 |/ V3 N
***********************************************************************
7 o6 O& r) \9 r% f3 w% a0 |; z# u. f3 x" y' w
    .sect "codestart"' h' M! B' I! ?; m0 D8 I
7 e$ `! W. w6 @- D; T4 @
code_start:& f3 w. |, P; x/ M
    .if WD_DISABLE == 1
; W: r( f! N; E        LB wd_disable       ;Branch to watchdog disable code5 s  `$ y& X' D" g% e  R( t
    .else4 }* \! P. E2 |# o' @' }: e
        LB _c_int00         ;Branch to start of boot.asm in RTS library
; W6 D9 k1 }  A" j    .endif
. }' a$ w" w7 ^- j3 c; J
) m, v6 i+ H1 K# p' W# [' V;end codestart section8 E) M, @: j0 t+ ^' w8 ]; U9 [3 y
复制代码0 I6 N3 ~! [- @% @4 ?
controlSUITE默认的文件呢是这个样子的。先关看门狗,然后在跳转到c_int00开始执行。当然这些都是在main执行之前做的事。
6 h9 g& Z/ M! t6 X2 w+ a9 R9 s0 W  ~
那么我们就把这句话改掉。让他跳转到另一个地方去。( }, _# ^( x/ ]; I' W1 h
    .sect "codestart"" e. w, `$ ^7 Y4 K6 Q) n  q

# p- w- a; H' k% Q& |6 w3 ?! e' Scode_start:
# c5 P4 F5 c  I" V    .if WD_DISABLE == 1, y  k) |! }  B1 r0 j
        LB wd_disable       ;Branch to watchdog disable code
! Y" B! M: K* U( I( ?    .else! y! \) u. ^, v% {
        LB copy_sections    ;Branch to copy_sections
5 n2 O- w* A8 x$ ?    .endif
: X2 a2 M( I/ f0 s: k% b6 x复制代码
8 n2 R4 U# K0 r$ R跳转到哪里去呢?我们就需要另一个文件给我们指示F2806x_SectionCopy_nonBIOS.asm
( N/ d7 H6 j8 T: @1 a3 s+ W( C;############################################################################
+ P0 ]' N" F# E. D. w# f8 j;0 V1 S8 y2 ~% D7 {% }! t
; FILE:   DSP28xxx_SectionCopy_nonBIOS.asm
, [4 X; V' X$ B/ L% m; b;
5 r, i3 Y( ?% i  T$ H; DESCRIPTION:  Provides functionality for copying intialized sections from
  L) S5 M3 @* v9 {4 u2 H;                                flash to ram at runtime before entering the _c_int00 startup
% R9 |  G& m$ P" w. j5 s+ \7 X;                                routine% K; K+ x9 m" t4 b* w
;############################################################################
8 e! c3 j7 g: _. j; Author: Tim Love
% h3 H/ ^- Q7 K, V7 [. d! s; Release Date: March 2008        
. X; H' d3 B6 m3 @* w;############################################################################
+ M- `; k  d3 L0 d8 @6 t% A4 R1 v: c) d& e6 B5 P# e+ ^
1 L( g" s  n  p& l
        .ref _c_int00
2 Q5 ?( T, t1 |8 B+ S7 k' a& x# F" k* }        .global copy_sections
7 Y, p" Y  N1 N, r! u        .global _cinit_loadstart, _cinit_runstart, _cinit_size
, e! F  a  l- [( m( @  j        .global _const_loadstart, _const_runstart, _const_size
  O1 @  z- e7 V$ t" \/ `        .global _econst_loadstart, _econst_runstart, _econst_size& C! x' t8 H6 k0 ]
        .global _pinit_loadstart, _pinit_runstart, _pinit_size
, n, _2 j+ m8 n- p        .global _switch_loadstart, _switch_runstart, _switch_size
; p+ V5 b+ B& v& C        .global _text_loadstart, _text_runstart, _text_size
1 i8 k6 e* b. k7 {0 L        .global _cla_loadstart, _cla_runstart, _cla_size: c! {0 {% \5 F2 \7 F. x0 o+ T, E
        # m  ~8 p" K. t6 C/ ]6 a
***********************************************************************
7 S4 j5 l# h, w' N  j* Function: copy_sections* ~1 V8 w' H0 u& i- g2 B
*
% v1 Y! @- U$ i$ v* Description: Copies initialized sections from flash to ram1 q3 _$ e& Z' H) W) _
***********************************************************************: A( z) w/ P7 E. M& `) Z& t, h

& ~) v# j9 j3 y+ C$ v9 n7 @8 M+ ?        .sect "copysections"3 k& ?* j# b7 R+ i3 l
5 |5 S+ a4 a4 J/ ?* \% }* p
copy_sections:' U, b9 w- k& G: c/ j( c

0 N9 f8 Z+ Z+ F0 p/ ~: U% J) B1 l- o        MOVL XAR5,#_const_size                                ; Store Section Size in XAR5  u( H9 T% H1 ^- _9 V; a: E
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
8 k- X3 }. ]9 W        MOVL XAR6,#_const_loadstart                        ; Store Load Starting Address in XAR62 c: X) [3 H6 D
    MOVL XAR7,#_const_runstart                        ; Store Run Address in XAR7+ g( e8 Y% Z( ?) u# I1 D9 c- ^$ U
    LCR  copy                                                        ; Branch to Copy
7 R8 D0 G0 ]% h   
' O; F- v3 C! I2 X% |+ C8 s        MOVL XAR5,#_econst_size                                ; Store Section Size in XAR5
1 r$ a8 j4 w3 I' P2 c3 @        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
3 U) h4 P( K% o7 R: g/ F" D        MOVL XAR6,#_econst_loadstart                ; Store Load Starting Address in XAR6
% f* y2 n" m% R# c* T( x    MOVL XAR7,#_econst_runstart                        ; Store Run Address in XAR7
  |& S( O2 C& ^3 c2 J    LCR  copy                                                        ; Branch to Copy
- k7 r6 e; z# a  \; {) `; m: V
6 O& V: C' @$ g  o- o7 F        MOVL XAR5,#_pinit_size                                ; Store Section Size in XAR5
+ }" x( V! L6 ]6 M0 ^+ |, D$ }        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
# A; S2 ]) p6 _, W1 c# {        MOVL XAR6,#_pinit_loadstart                        ; Store Load Starting Address in XAR6
8 o) H) ]' p: J/ q  {/ ^    MOVL XAR7,#_pinit_runstart                        ; Store Run Address in XAR7
4 W/ S' U0 `7 Y9 b6 C& [1 v    LCR  copy                                                        ; Branch to Copy
2 w0 s- Q  A- {$ F6 ^  F
' f% P* l" \4 a3 K7 _+ C        MOVL XAR5,#_switch_size                                ; Store Section Size in XAR56 q9 _# H+ E! i8 w, o& h3 g
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC) }# Y6 z: W, Y- {3 ]# L0 e
        MOVL XAR6,#_switch_loadstart                ; Store Load Starting Address in XAR6( S7 ?7 Y6 i6 O- T1 C8 n  N
    MOVL XAR7,#_switch_runstart                        ; Store Run Address in XAR7
& Q& V' S/ F0 G1 r    LCR  copy                                                        ; Branch to Copy
; @: y& U$ L6 M: U, v6 E$ x& K
7 J  ^, m+ ]4 `9 B8 o        MOVL XAR5,#_text_size                                ; Store Section Size in XAR56 h/ ~. o% G, N1 }' H
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC. \9 M8 E8 A$ q2 O, m
        MOVL XAR6,#_text_loadstart                        ; Store Load Starting Address in XAR6  {- J/ Q, n9 C' {. s
    MOVL XAR7,#_text_runstart                        ; Store Run Address in XAR7
' Z" H7 s+ C' R: M0 [    LCR  copy                                                        ; Branch to Copy' V( q7 S( j! B+ W0 V- A
    7 t- l6 z: O: P7 d3 [
           MOVL XAR5,#_cinit_size                                ; Store Section Size in XAR5, p( z6 a$ t( R/ ], Q
        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
1 ~9 T# V) Q* E5 a/ y$ h        MOVL XAR6,#_cinit_loadstart                        ; Store Load Starting Address in XAR6& ^/ R' ]' ]6 m8 k, ~8 Z/ G
    MOVL XAR7,#_cinit_runstart                        ; Store Run Address in XAR7
2 [3 v3 i* L& |* ]9 o6 W' D1 G    LCR  copy                                                        ; Branch to Copy   \' m  C: z  [# q1 q

& l0 t, ?: q9 `  N    MOVL XAR5,#_cla_size                                ; Store Section Size in XAR5
4 y5 e1 x4 A. _3 ~- _0 r* u        MOVL ACC,@XAR5                                                ; Move Section Size to ACC
6 c( l* |: Q- T2 t        MOVL XAR6,#_cla_loadstart                ; Store Load Starting Address in XAR6
8 n1 ]! K* D2 S/ t) c5 K0 Y    MOVL XAR7,#_cla_runstart                        ; Store Run Address in XAR7
) T6 |5 q! p6 v; p% n* e8 V    LCR  copy                                                        ; Branch to Copy# r, @7 [* z/ f" U2 Z' |
/ A/ C. d  l# p3 ?6 O, `
    LB _c_int00                                                         ; Branch to start of boot.asm in RTS library
8 e( H( G4 ], r& m1 L, o" P" m- m! M' @, ?
copy:        
" k' Y- D& l4 k% O7 ~: Y% w- p        B return,EQ                                                        ; Return if ACC is Zero (No section to copy)- X$ `: |8 R/ n" L' l( s
# ~/ ~0 l' m) p$ s4 o
    RPT AL                                                                ; Copy Section From Load Address to) {* b4 O* n# e. _2 p
    || PWRITE  *XAR7, *XAR6++                        ; Run Address7 {* w- d! ^' @+ S" C

0 Q+ E' ^) }$ W/ c: Oreturn:
* ]7 p: \8 P/ t8 O% O5 j- T/ K/ E- {        LRETR                                                                ; Return
+ V% g& d( J! t- l1 @! p# d6 @7 O' O0 |9 M) \* B/ b# X
        .end
- A5 P4 X" v* F7 v; j" e! R; E        5 b# p1 L/ q& a8 t$ C9 a
;//===========================================================================
7 A% ?9 p8 x* k1 W;// End of file.( ?  k7 _" `1 m! B' v7 W
;//===========================================================================
+ @; E$ g. w- o6 [) ]5 g复制代码* e+ W* P9 e2 Q

3 e  T4 F' N/ W6 o" S看到这个文件比较长,但其实是一直在重复。每段里是先把某一个程序段的长度给ACC,然后把存储起始地址,运行起始地址给XAR6,XAR7。然后就是拷贝。
5 z; h1 j" N0 ]8 m然后所有的数据段都拷贝完了,在跳转会c_int00继续执行。
* b& J3 Q4 j. }, ^这样就完成啦。是不是很简单。
) L! U: v/ x6 \5 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

211

主题

652

帖子

1507

积分

四级会员(40)

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

积分
1507
2#
 楼主| 发表于 2016-6-28 15:08 | 只看该作者
看贴学心得,回贴是美德
$ C7 X$ b* g# \1 h- k9 ~

157

主题

597

帖子

1239

积分

四级会员(40)

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

积分
1239
3#
发表于 2016-6-29 10:36 | 只看该作者
好人啊 感恩感恩
6 G3 d3 u, s0 n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-27 19:51 , Processed in 0.081628 second(s), 31 queries , Gzip On.

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

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

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