关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7582|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ o) O  W& h! d4 F8 ]
( O+ n7 s- a9 O6 S( I% ^6 A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! ]2 y: I( ]2 ]0 h5 R( P; t  A# o; M, R4 Q: j9 l3 P
其他程序段。。。。。
, k' K/ M" S) k3 W
+ a% U) k" n$ u: i   free(x_d);
" G8 ]& v' r  }" O- ]# B4 Q
7 ?- F7 P, }- \0 K9 F/ \使用DSP侧单独调试功能,验证动态申请没有问题,+ j. K) P1 C, _% x/ k

+ s/ ^0 a0 t" W4 ^5 G0 t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 Q! i5 n( V& \+ k! r: R% c* L
5 m0 L7 A+ a: p+ I' i& u

* t% O- V  z5 z  E# t, A/ g+ @" n- V

5 M& R: q4 ~) d
: j) e! A  D0 s1 |( B; P
& }) s! g  B9 T5 g3 ^* e% H  G, }& N& D9 ]# l8 K% K" M

3 X1 B% w$ _. e0 ~+ N$ @" K* W, L+ A6 w  B8 T, H9 R+ g" f

# y- q7 k/ Y' H8 L+ W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ m3 M0 a1 Y% L; R! Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 W$ H0 T; f5 y! z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. v' P  @- \3 h: K& t
* }4 d$ U: I) p
是不是需要在DSP.CFG中进行配置1 j$ \; m4 d1 f
我现在的配置为
5 e) a1 a- ~$ s& n2 ^8 M6 _3 i7 _# H; ~; ~, _' R
/*9 t1 a5 t) ~1 E, W, Y" U
*  ======== Operating System Configuration ========% h7 C+ ^6 W& h. @& c# C$ u
*/
7 ]( K3 w+ ]6 `  W6 F9 ]! |0 ], f9 e  c) D$ J' F: z$ V; K
/* no rts heap */, w; K- e9 X4 \7 g7 |+ |
Program.heap = 0;
  ^/ k; s6 s1 M% \Program.argSize = 100;  /* minimum size */
$ q% J% {' M  S2 D+ p: ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 s; M  W; M9 d0 M9 S7 a& j' @- W9 l0 W$ y
/* create a default heap */
: O" X; q0 l7 ?. P+ k6 ]% {2 q% @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 ~% x* e% `7 t2 [4 n
var heapMemParams = new HeapMem.Params();
6 Y5 Y) F! i+ d* nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ r- ?8 s8 M6 H0 R8 r( a5 \8 A8 g( `8 u0 R' u
var Memory = xdc.useModule('xdc.runtime.Memory');3 @2 q$ O0 h0 A3 O7 C! t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. ~  t7 T6 T  n, f2 _+ v

7 P. j0 ~; z4 E/* configure System module */3 L/ R- |+ B% i8 Y" d/ U( c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 G- h. J0 g  _  g, w  @% y8 _SysMin.bufSize = 0x1000;+ M( ^* B5 C# U6 N
SysMin.flushAtExit = false;
0 J) A, W+ }3 V# T: Y% ?+ ~/ H* K2 c* g
var System = xdc.useModule('xdc.runtime.System');
& O. l* p/ i# u( vSystem.SupportProxy = SysMin;
9 _5 B: `1 @$ @4 C* s/ K, w# @3 Q& v; ]# j
/* configure SysBios to use the lower half of Timer 1 */. s2 h9 J. P# j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 c+ P' L; K7 G( Q1 c, Lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
" X9 Y0 o; ?$ E( a' g! Q0 STimer.timerSettings[1].master = true;$ t. C; X6 K& L
Timer.defaultHalf = Timer.Half_LOWER;5 @5 r# F) ~' T5 r; c# [
Clock.timerId = 1;9 \) a) P+ _& Y, V) j3 u# w
) F% e8 E& M. S( g. P: j  u

! u! s/ a- e( f% J, P9 B# x5 h& O/*
; r: f9 u2 \* Z3 k+ X# ?. D/ h *  ======== Miscellaneous Configuration ========# ^. \: T, y( v5 D/ |; o
*/6 R3 V9 r7 c1 P, G5 n' G
6 H( x  j( k- f" ^) D, v
/* set default diags mask */4 R" U4 m* n: @9 r8 o6 r
var Diags = xdc.useModule('xdc.runtime.Diags');
% ~- w5 ?& V( p4 k8 \5 Cvar Defaults = xdc.useModule('xdc.runtime.Defaults');7 e, N8 U7 F# v. a
8 D/ g% R: P5 b; e- P0 Y. P) m- r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  I! i8 x5 A' J  O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; O. r+ J6 @3 @. i- @2 D( O$ l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 `* L8 H# x6 h' P9 a  q* f
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! k# s' h4 U" V) ~$ \. QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 i  R2 F$ s& F( T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, x# e0 D, g3 z* u! I0 d- SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 m# d4 C$ Z0 B0 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ B. @5 j+ k! f' T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. k& @# v4 ]. v( DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 R! L# {2 E8 D3 g: g- q% LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 `0 p1 w9 s) T# t0 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  X& \5 v1 d& w# ]* F( qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# Z/ ^4 W8 H9 h4 {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 L! o9 E) X* m! k9 \$ F* r, m- d  f6 J& ?" S; ?
/* override diags mask for selected modules */
( X: ?, s: O: |# M* V5 Yxdc.useModule('xdc.runtime.Main');
, R$ @) u; z' f* m3 p6 H5 Q$ ^Diags.setMaskMeta(
. L; ]1 r1 A- f2 U& _8 f    "xdc.runtime.Main",
; J  V. ]$ h# g+ o    Diags.ENTRY | Diags.EXIT | Diags.INFO,) Y8 I, s, q2 w
    Diags.RUNTIME_ON# `+ m/ w1 f4 D" I- W4 ~4 ?
);
' f* Y( P$ D. [( n6 }: ^: c2 f4 ]) m5 e5 A
var Registry = xdc.useModule('xdc.runtime.Registry');
3 _2 @  Y, h- t' |' Y8 VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; e' f) U; i/ y$ S: v) ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 h' s% u5 K3 Q- ]) ?7 C, n  p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 W9 V/ @0 V' c# e4 X; ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, `  c. p0 S2 O& c4 v9 @/ k& [  I
  g8 \3 K7 w7 N/ K) N/* create a logger instance */4 H% a4 F% R% M5 A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) o# p  [5 e/ [var loggerBufP = new LoggerBuf.Params();( h3 T: |7 }. Q2 y9 n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ E+ C3 P. ^- i5 C2 `, }- i6 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# r0 z8 `) k- R5 V

/ [# `; ?4 |0 [$ I4 x, Svar appLogger = LoggerBuf.create(loggerBufP);: i" a3 u; y2 ~& g0 [2 A9 L
appLogger.instance.name = "AppLog_Core1";2 v# {5 n; ^) q
Defaults.common$.logger = appLogger;9 @7 ], f5 o5 N6 A9 p
Memory.defaultHeapSize = 0x8192;   
7 c2 K- A/ G; E) Z3 lIdle.idleFxns[0] = "&LEDStatus";
  Z! R" @+ o+ T) ^- yCache.initSize.l2Size = Cache.L2Size_32K;& D. l1 F. N: [7 \: Y

& @1 u& c$ d+ k% s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# Y7 b. ^; Q/ G: k, A1 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( D5 e% A; _: G' _" \/ uvar heapMemParams = new HeapMem.Params();) v: Q6 w9 {4 h2 i' q+ `- ]5 x
heapMemParams.size = 0x4000;
, R9 e5 R( @4 p: p3 b0 B( e' v( e2 {. p
var Memory = xdc.useModule('xdc.runtime.Memory');
+ p" O& b+ ^% n# [( i3 P7 w* t4 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 `3 V) S7 M% O& y4 g1 H  t$ X! k: T8 m  i5 i/ N
我大约calloc  每次共计大小为5K*16bits,
4 [4 C4 f7 `, R$ @; ?而默认配置才0x4000、需要改大。
* x0 U5 @5 z5 ~" g0 C- A2 t5 Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 [4 `! |8 S8 l3 aProgram.heap = 0;
' |; O& N/ U8 |8 D' u- i. W4 l/ wProgram.argSize = 100;  /* minimum size */
3 F: y" f* @: w9 H. r' \0 Z% [3 vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-7 04:16 , Processed in 0.044629 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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