EDA365电子论坛网

标题: DSP 远程升级 / Bootloader设计指南(二)介绍一下c_int00 [打印本页]

作者: mytomorrow    时间: 2019-9-29 15:24
标题: DSP 远程升级 / Bootloader设计指南(二)介绍一下c_int00
目录
" N: Y5 _/ |, w& r% e/ X' ~" J! [$ A' K: O6 W, f" p
16 F; X  E# g) q- j& A: }
初识Bootloader

2 B* g5 t" H. ]; a! y6 A+ Z8 l; I, m8 d' s6 D# C& m& Z1 z
1.1 一次Bootloader7 k1 j. e+ ^6 O- P( }- w5 H/ t5 y, q; [6 i
& k  m, @3 O1 U! s
1.2 二次Bootloader
% l' D2 |& `, W6 f& ^# X1 }3 S- r; }9 W" Q: r: z, `' L% T+ V. Z
1.3 DSP上电引导过程
) L4 r8 Y; ^' p3 }) P
3 {! [& r! g7 U27 F( M$ M4 X8 u0 C
关于c_int00
4 k/ G8 c0 Y, J  s. n

- x9 h! s+ d* }. @2.1 c_int00完成的工作
1 Z$ q& [8 E* P2 j  ?1 \
( ~5 o& |' [& W) [2.2 系统初始化
: W. C& ?3 N% E5 m3 E
, j& Q" V; M5 c1 M2.3 全局变量初始化& w& A/ G7 J$ @

! y9 V6 M3 \& E( v2.4 全局对象构造
& L; G( g- Y; H" g1 y; M: n8 H+ e5 |) m" V, i
2.5 mAIn函数与exit函数的调用
1 z3 l3 K) w( M" ?
/ q/ a& \$ i, E9 o3
7 c% J/ \$ K5 Y6 K: q& o8 mCMD文件与DSP存储空间

3 @# `; m/ r; A/ ?% D+ @
+ Y% g4 M9 N7 l" X3.1 MEMORY和SECTIONS指令  Q+ M. O" `1 f" U! K+ w4 A
% D5 ]  A. s8 {* X7 O; X' e) W% R* J
3.2 程序与数据“段”: W7 x3 @  j% V
5 I" [: X6 P3 E
4
/ l+ b6 _/ B6 v0 v' A2 FBootloader数据流
8 Y" s  \, ?- e
# P! R2 u2 G. ?7 o
4.1 数据流结构4 x% N3 o( p3 d
. t8 n$ i; U# g; |
4.2 16-bit数据流9 w* I- Y2 o% s0 t, N
( P' T: V$ [) p6 y& _% S
4.3 8-bit数据流3 N; N. A1 F7 c& @* }1 d

/ ?  y9 j9 D& b+ |$ N5" ]6 I8 f8 j% l8 e) b: ]! Y* m
FLASH擦写操作 —— FLASH API的使用
( `4 ]: _5 e  Y3 j9 G+ q) A4 I+ y

! h  `7 s4 b( `4 G5 X5.1 FLASH操作的重要特点
2 b. k4 {  J' ]  F9 d: M0 ]6 H. v  m6 W
5.2 FLASH API使用步骤9 X8 V3 H5 M* q/ Y) n
- Z. n1 z: K: [9 @0 q" C7 V  L& L
5.3 FLASH API常用函数使用举例% C0 ^8 r* X6 F/ U
, |' S" B( I6 }1 Q
6
% Z8 ]" `3 [3 X1 XBootloader设计过程中的9大关键点

8 D7 C2 D# Q; m5 ~( a! V8 m& g6 x/ L0 ?
6.1 Bootloader程序在升级过程中不被擦除的实现方法
/ W# q. q$ a1 {& N+ G, {
5 D9 q  V1 O7 L8 \  }9 M! w6.2 上电后先进入Bootloader再跳转至main()函数的实现方法" `* D) e( [4 y7 e5 ]% o

) }3 d* a8 X7 O6.3 Bootloader程序作为CCS应用程序工程一部分的实现方法
: d0 h6 W3 [) w
: Q/ F' v  X8 ^) x; t1 Z6.4 Bootloader与上位机形成交互式通信, c" Y+ [# F4 `( i3 \& l

6 {: U0 T9 P* ^2 F4 U) b/ i6.5 Bootloader程序能够对接收数据校验的实现方法
/ d/ k7 f2 j# d% z' x& z& w/ t
( s8 J0 D! }5 R. E8 u; o6.6 在数据出错等情况下能够自动重启的实现方法
2 Z1 u1 p! x$ L5 `
/ z3 _$ r4 c7 J# K0 V- e7/ A* {* |2 O$ p8 J8 o" K! M; [
CCS输出文件格式 —— ASCII-Hex、Intel-Hex与Binary-Hex文件

1 d; i3 x; I2 v1 P! X' j# f& x! @% c# f" q, k8 z6 S+ S7 |* w
7.1 CCS配置生成Hex文件的方法
  ?1 H9 t7 W0 B# t
7 L; v. K4 b- j2 I5 H: X7.2 ASCII-Hex
5 H2 F  O0 e: M
+ y* W0 g# R5 W7.3 Intel-Hex
5 A6 Y! M8 @1 H. F6 [" K. _; z
7.4 Binary-Hex4 O) V" D3 I2 H2 i

! d6 B7 L* v4 @0 P3 O( S/ M/ m
: @  j* |: i" `$ }1 u4 n3 m4 G3 s, Q+ n; V9 e/ }  w5 ^
6 D; p: @5 t7 ^9 E1 F# G
2 关于c_int009 X& _1 K# o% b& `# v
- N; u5 ]9 ?4 _
“c_int00在跳转至main()之前都做了些什么”
( X7 N- A$ m8 M, D. `+ `- ^! G6 N
% S$ F. Z# C% I在设计Bootloader时,非常有必要对c_int00函数进行全面了解,因为通常会对它进行改写。
, J) x5 e$ N! o' J9 a0 F, g0 w# y* O" T* _5 F' v7 X
c_int00(也作_c_int00)是C/C++程序初始化代码的入口地址,完成建立C程序的运行环境。它是运行支持库(如rts2800_ml.lib)中的一个重要函数。
' r% Z* `5 b" |  B% m: n' l4 G2 m; X" R/ B4 {8 p. N* X3 D
DSP上电时,由Bootloader负责引导至c_ini00,具体引导过程见1。
* ~0 ]2 v: r$ V; P; K5 X
6 B' n. d0 p; G0 c2.1 c_int00完成的工作2 _+ e4 a+ U  j- o& t
4 A* x" a! _* d+ n
1) 定义系统栈.stack,并初始化栈指针,配置相关寄存器0 ?8 a6 D/ T; P/ o, r0 G" |. h7 x

- T9 b: J" |1 D/ _8 Q& @0 S! V2) 初始化全局变量(.cinit)
8 ~; |. ~/ Y& g  s9 i* Q& ?% A3 y  z/ Z+ n
3) 若使用C++,还会完成全局对象构造(.pinit)
' ?2 D( A6 S; L* [$ l" G3 ?1 G
4) 调用main函数运行C程序) l2 n7 J  r- @+ P% a: K+ y

' v1 W2 h1 E7 j, [5 M5) 当main函数return时,调用exit函数" p! }  n% {3 c8 `% G7 G

1 }. f' u: v# Z. f# g* d- j用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。. L; ~$ i4 I3 F# k9 \+ l4 A

6 i, V/ V8 o8 W; [+ ^2.2 系统初始化% x  Y! i; x2 {" r; R* P, q* Q

8 J4 {% V' |. @, ~8 G在TI官网找到了rts2800_ml.lib对应的boot.asm源文件,其中核心内容为c_int00函数,其中关于“定义系统栈.stack,并初始化栈指针,配置相关寄存器”等系统初始化的部分如下/ p9 V/ p' Z  R- Y

! R  e6 F) n, x# k8 M+ E9 R
0 S% r" S) W; ~' z. _, H, M

8 ?; x7 W+ f" {  o4 H
$ ]; l: x$ u% A% g- M
作者: wu68aq    时间: 2019-9-29 19:05
看看。
作者: lienmalianNW    时间: 2019-10-8 00:21
很详细的介绍,非常感谢!
* C# d) \) `) y+ q4 \
作者: 金木    时间: 2019-10-8 21:58
谢谢楼主分享
1 u8 Y! J) x4 W% A& M  Z
作者: 依利达    时间: 2020-2-22 14:30
讲解透彻,值得收藏( `# M8 x( u! o* B7 i4 J

作者: thr1573    时间: 2020-3-5 15:30
看看
作者: GilbertDouQiang    时间: 2020-4-23 15:14
想看看内容% C2 V/ S" W0 r/ i

作者: toby417    时间: 2020-4-28 22:51
学习一下。
作者: ExxNEN    时间: 2020-4-29 13:24
DSP 远程升级 / Bootloader设计




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2