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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ V/ T/ `1 T3 U+ C/ ~5 _/ U

, s8 a: r- y$ E! \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- S8 O' z, Z1 H& }( a  R4 g
1 F6 i3 g: _1 ^/ V
其他程序段。。。。。
3 V! X# J9 D9 P' [, {
3 @4 J" Q5 S, R: T1 k   free(x_d);
: ]/ C9 y1 ?  j8 Y9 h) v5 P
: D) o# c1 @7 G5 x) c5 D3 A使用DSP侧单独调试功能,验证动态申请没有问题,
9 m; c( D* a8 i/ Y" g' }7 o) Y# p1 K/ \! g% R, L
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; p2 Q9 x6 Y- u5 k

. z; U  |. i# {" A2 y) L! ?3 n: B( _: J& [
( B' N' d8 S: A& x2 E) ^7 j
8 L+ Z1 n  H! Q  ~# v3 |2 Q
8 t) m* g/ p4 M0 Z1 p  G5 s+ H1 B

% X( G1 L9 W$ I
2 G; D. l: m) @! h0 D( [# h1 l* p. Y- n* F4 u; S

: L+ ]# o+ G) N& B& L9 [- L' C2 b  J, h  N& g. z$ C/ X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. T6 b, E0 M3 ^4 j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" ^  {1 t$ D3 t: G2 Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 n0 T$ K: Y  b7 [7 w

2 M8 r$ Z* l. `* ?0 p是不是需要在DSP.CFG中进行配置2 c7 X( J" m; ^% V+ o, T
我现在的配置为) E  t4 M0 b$ _0 q
7 T: r) Y; m/ G9 ]7 Y3 j( G5 Y& v4 i
/*
' T* ~/ O1 r' d4 V4 O; R8 A2 P8 ` *  ======== Operating System Configuration ========
, O1 V6 E! v  c- G7 ?5 @ */
- Q8 [! I+ _$ I. k$ y) z- X* z7 j" R# y4 g) {* a; F0 z
/* no rts heap */5 t( X2 v. h* f8 a  m9 \
Program.heap = 0;5 X' D, U, Q. E
Program.argSize = 100;  /* minimum size */
& W: ?4 a: i, h' s) i* s& _4 T7 }7 pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 l- i1 {0 {# [0 A( I* g# L( x
2 H0 z* Y: g2 y4 n1 k1 l! h" M/* create a default heap */5 k- i# S5 l$ Q/ I% B5 L' R8 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# M7 w& P1 ^- g/ g
var heapMemParams = new HeapMem.Params();4 ]& A, P! b2 q" q, Y, P' P1 `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ |5 R5 t  M5 Y; q1 ^5 [, \5 x
9 T" Z$ e* N0 |( f2 A
var Memory = xdc.useModule('xdc.runtime.Memory');6 ~7 i, d# J& `5 h: I; K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. Y) t, r9 ^, o8 f& V3 P) i8 E# h2 g3 E$ |. i+ m2 n
/* configure System module */# Q: i+ N4 I! ^2 L# ]- p2 a: J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 x3 H$ h6 }; o- p, A: B5 E7 ?: FSysMin.bufSize = 0x1000;
! H3 u5 P( j7 b. Z. U7 ?0 [, vSysMin.flushAtExit = false;
6 I* z* E$ L- X. X% l; B# u; w& m3 [7 L
var System = xdc.useModule('xdc.runtime.System');& `3 j' ~( E7 Q( }2 L4 e
System.SupportProxy = SysMin;
" L3 {; u, [% I0 Q; _) Y% i3 ]; ^' S5 z; X
/* configure SysBios to use the lower half of Timer 1 */+ U4 Q8 \0 @. b2 A& u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 }, Z! C$ {5 `2 n( y' H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! Q: v, b8 w( Y" kTimer.timerSettings[1].master = true;8 j/ w$ J# a, v
Timer.defaultHalf = Timer.Half_LOWER;
; A$ ?) a8 s7 ~& w, W4 YClock.timerId = 1;: e) ]" @/ o. {, f3 W( |/ l) X
9 S7 U% Z/ O, p2 Z6 P

; J) V3 G9 n. y/ g/*. |. [% E' u; _, f1 Y2 u( a
*  ======== Miscellaneous Configuration ========$ a! e! L0 I3 V1 |7 I" X& x
*// W; I2 h' E9 J, I
) A- o- ^% u; u0 A
/* set default diags mask */9 C6 h2 y7 J- O  r! G
var Diags = xdc.useModule('xdc.runtime.Diags');
/ R3 K9 b' i6 `4 Q* L# ?+ u4 }. Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');' `3 C% B7 @, e: R/ f
: ~; t9 c! N0 x7 j/ Q9 c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 L0 @4 r8 D1 c  P( ?7 M2 F! V4 K1 K$ iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) T2 }  g* `$ }( G; f( ?) w* yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. S6 A6 g) U+ dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ H- p$ d* I% u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! l1 d" F  O( VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ M+ b* T- R. I7 m7 N* w! RDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 ^3 }. |# @+ I; _: r; u: kDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. J+ b' p% i, P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. d4 C2 B( D4 f* FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; w. n; x+ C' W2 G: eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* t/ _, k7 h' H" WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 \7 q& J  I* L$ R  S: s$ W: V6 E  eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 ^* G' m  }1 v7 ]  \5 aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* n1 c9 ?4 ~! C# _5 J0 c4 [9 [* b
6 b- C1 |6 y  l7 V7 d8 \! ?( u' [2 {/* override diags mask for selected modules */
; {5 s7 B  `; N7 b9 m$ uxdc.useModule('xdc.runtime.Main');
) x* a! }2 D! _  O: K+ Q2 cDiags.setMaskMeta(4 v7 B2 L6 |% K( x' D  Z5 j4 \$ Y
    "xdc.runtime.Main",
+ {+ A7 K  ~$ W; s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 G! K1 P2 v! S9 `5 P    Diags.RUNTIME_ON
0 y3 g! r8 K) N);+ {& X$ O/ r* Q1 `0 L
9 W5 @; d+ |  _0 J
var Registry = xdc.useModule('xdc.runtime.Registry');5 C0 I! L; L# X. `$ {( W6 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) N3 {% w$ w/ l2 m9 [7 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' t% ]; Y/ G+ J, t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* R' ?" k9 J& V7 H, a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 r9 R4 T8 Q+ u* M2 G& t
3 k4 F$ O6 j$ D2 I1 A/* create a logger instance */
, m; w& m% G! l& yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 |8 v! \. O8 {" ]7 Q, I9 x) Gvar loggerBufP = new LoggerBuf.Params();
0 v" D1 }/ L  [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 K& l" |/ z3 Y  L, G) K& `2 y  o& AloggerBufP.bufType = LoggerBuf.BufType_FIXED;
- M6 s% ]$ B0 @/ ?# ~2 _! k6 a+ l- I4 N, m3 c$ c
var appLogger = LoggerBuf.create(loggerBufP);
, [: f& P, |& _appLogger.instance.name = "AppLog_Core1";
' u4 [+ l. l5 F$ i( _Defaults.common$.logger = appLogger;& Q7 J, _* C- d9 C
Memory.defaultHeapSize = 0x8192;   
! \5 V3 s3 G9 z; E. [" _0 ^3 XIdle.idleFxns[0] = "&LEDStatus";% q0 w, i/ T# _9 d2 p8 ?; f. e+ O
Cache.initSize.l2Size = Cache.L2Size_32K;
4 j- Z/ `' ~$ L  q0 \
% N- v! s2 I0 B0 m9 [# X
回复 支持 反对

使用道具 举报

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 */' q1 F1 R& F" C: m! X. j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ C  w8 w  L' {9 Y3 d2 v: X4 Q3 Z
var heapMemParams = new HeapMem.Params();
* g7 L( X- S2 M3 Y: cheapMemParams.size = 0x4000;. ?1 p2 b3 x& {) o) L! f& l4 S: T

) D6 A  K9 B1 N; _3 ovar Memory = xdc.useModule('xdc.runtime.Memory');
% w  V( C4 e6 ], X3 F9 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ h& H; T6 F. K8 U; m- h0 L" Z2 `
. n6 V. s/ s$ ~( G/ E
我大约calloc  每次共计大小为5K*16bits,% ?: I$ C1 `$ J
而默认配置才0x4000、需要改大。
) P" X, [8 n6 S. N, u( x$ e( ?5 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. i5 N9 p* a9 j% @6 W6 I
Program.heap = 0;1 z; }6 n& k9 D- ]' z5 x
Program.argSize = 100;  /* minimum size */& Q6 F2 u/ o, o! \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 19:19 , Processed in 0.051400 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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