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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 x6 z* V7 x, K
( y, Z& {/ S5 }3 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' P8 b1 W/ D3 W& ^
4 R1 ~9 C9 I% e/ ~+ m4 n
其他程序段。。。。。
; G5 g$ y7 ~5 ^- K6 ~, }
0 b& l3 q, j: D; A- S* w   free(x_d);
* ~+ V; Z) Z& ~! }: |/ _7 [5 p+ m4 q
: t- u0 l/ H5 [# P( x使用DSP侧单独调试功能,验证动态申请没有问题,( o! i3 {6 O+ |7 L5 M6 {
+ Q5 I: x* r/ S  O$ u# @$ B( j7 y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; k4 [+ c' I2 u" j

, ^3 J' S1 {# y7 q! o1 O' c  ~  l+ C) r) d. Y

  D4 b7 ]  h9 c& J. k* o
5 D0 o& I  t  c8 J: H0 U3 [7 b2 f5 I/ x& v' `
$ }1 j  k: Q3 r) }% G: T7 `. d
1 A  L1 L/ ^0 k4 ]8 s

  a" W' j+ u7 [& j5 u. r
$ @9 |6 K0 S& J7 C5 `- o+ j" k( E% J- S( c' N6 w9 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 s; Z0 E% V7 \- R% o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" d3 H: j2 @8 h& B' ]6 a# s# k) s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 x' q  C* u& _  {1 y
0 H( q7 Y3 t" v4 o, i1 A
是不是需要在DSP.CFG中进行配置% N1 Y% A. y/ w/ ?/ z, Z4 e
我现在的配置为
  i, r: A: Y- ~- b; x% j' s8 M6 \2 b2 j# X' ~: b3 F& Z! _
/*
5 N9 D9 o2 ^: \/ m% r' j *  ======== Operating System Configuration ========
- S# R! F2 ~) N. `: @ */
7 r' l. k6 M' ]& v" \+ @3 m/ F* O: z+ W, G4 Q5 p
/* no rts heap */* Q1 L  U3 B' q" y; Q: W+ c
Program.heap = 0;
& Q3 ]! l2 b: R2 f4 j! a/ s" mProgram.argSize = 100;  /* minimum size */, b+ Z* |  E2 h6 Y" ~. @' B; J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 ?/ D( J7 u5 p0 R& Z& k5 ^/ p- Q9 S1 c# Z+ n; D
/* create a default heap */
  L3 U' C) j# hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 h6 Z+ F) d- u$ Ovar heapMemParams = new HeapMem.Params();2 W3 @) A0 k& B0 f8 _" }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 h1 ]! i8 \3 L0 q
. G% Q0 b# h/ A( \* |
var Memory = xdc.useModule('xdc.runtime.Memory');
3 B& W. \9 C# ~7 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 D$ W# I% Q% G+ n$ h1 D
# n- m; \' |- @% [7 r! i9 H9 j. X/* configure System module */, ~% ?) y, A" t$ X  _* i! z; d
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 c8 G1 D/ U( C% @* x
SysMin.bufSize = 0x1000;
$ u# m# w4 z. a0 Y4 n2 S) ^SysMin.flushAtExit = false;
. b# ]& i. P$ E0 j' i: C& \$ l! V0 X' y/ w' X( a2 W
var System = xdc.useModule('xdc.runtime.System');
2 n3 h# E4 i& H5 R- FSystem.SupportProxy = SysMin;& v8 I& M! b" b  f, f, n

& W- Q, C5 z3 M4 M( c  `/* configure SysBios to use the lower half of Timer 1 */$ R5 X9 i4 w2 N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, L: }0 }5 H4 J8 G0 }) J2 v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 H: ?3 u! X2 R& r6 h' t
Timer.timerSettings[1].master = true;# i# I8 [: D# A) R/ e5 m5 J
Timer.defaultHalf = Timer.Half_LOWER;& p1 C$ H: P- Y8 J
Clock.timerId = 1;0 {/ Y1 S: [% [# |
7 U0 \+ N6 q4 O$ U& U/ m3 R5 d
# @) V+ I: _$ N7 }
/*/ [- N9 u  x7 g$ {& |0 [
*  ======== Miscellaneous Configuration ========1 V- E5 A$ F& {, u7 S# V3 g7 z
*/
/ E: {0 d9 p5 s: S' J, J  l+ }
) @/ K1 ]* @4 ]% O  S- x4 f  D/* set default diags mask */
5 a- n+ X$ @1 M2 c" S: ovar Diags = xdc.useModule('xdc.runtime.Diags');! ]0 \1 c, Q1 d, c% k* E  x
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 ?0 y; [. J" r
9 y/ H8 K; Y7 @& l! v) K3 O. IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 u, n7 ?' U, r& O# r2 b5 v. y7 X( J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 p7 `$ s: a( R) ?. y& U6 D' D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ ?8 Q; p" q  a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 {! Q' q2 ^" f# O* a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 g- Z3 S: P& F3 FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 z6 K, u4 g; B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* z/ P3 }+ g& x$ [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% k% w1 T3 M1 J- d2 W, K5 Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ \' B# q, C5 R, t' B5 t; ]) a' E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% \2 N+ V. t+ f& TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 E, I" r5 a* V7 xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" l# i4 ]( f2 QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% _& [/ V; k- f: m6 e+ D& a% {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, G7 U# X8 H! m" [. A

: n, E4 R/ E7 d1 o* E' C/* override diags mask for selected modules *// ]0 ]3 W: a% L' _- g
xdc.useModule('xdc.runtime.Main');
# e- w1 `! u5 YDiags.setMaskMeta(
0 G0 s3 H) E5 e3 d1 b0 ~0 l    "xdc.runtime.Main",
0 E5 z1 A- r/ K" z8 i& a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 W; \, g$ M( u: x4 L    Diags.RUNTIME_ON
* h! b$ @1 s8 h4 L/ I" D);
+ F/ g4 x6 ^- y8 U" Y% k" d3 s4 `' N2 m. M* M! [
var Registry = xdc.useModule('xdc.runtime.Registry');
6 Q4 u; n5 @, B, J9 A9 L; iRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) M* u. {& ]2 j
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; r5 j2 M) i$ g" B- WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# Z: }  u- b7 k. x8 ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 h2 x# u/ C* ?. o. U4 y8 m/ |
- q! W6 e" k% R% F9 ?: n/* create a logger instance */
: O# j# h  u7 cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# V# D9 G% n  L$ o& A9 lvar loggerBufP = new LoggerBuf.Params();
3 ^: |3 @1 t' g9 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 ]7 V) X3 _: JloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 X4 H. v# k% V+ U/ g4 n- L+ A& J* e# b- J
var appLogger = LoggerBuf.create(loggerBufP);" _. G: k6 ]1 O7 G# c
appLogger.instance.name = "AppLog_Core1";# H& t8 |- m' W7 D. Y
Defaults.common$.logger = appLogger;
" ~, o& Y+ L0 |7 d' q0 j9 a; NMemory.defaultHeapSize = 0x8192;    . }. r7 K! c. i* p9 k
Idle.idleFxns[0] = "&LEDStatus";1 J0 m# s; {0 W; ]' o
Cache.initSize.l2Size = Cache.L2Size_32K;
" d3 g0 L2 J/ l& F7 y% r2 k' k9 z- s! a' L7 K& W  \1 L" @& ?( u
回复 支持 反对

使用道具 举报

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 */1 @* H( Y3 F" G7 t- {$ P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& ?$ f" U/ J, |) E6 Y4 svar heapMemParams = new HeapMem.Params();$ g3 n; t# u9 E! D( T5 {  x
heapMemParams.size = 0x4000;& ~4 V/ N( U, l, A7 x" `
: l( G1 O1 y' U' n; ~% ^  l
var Memory = xdc.useModule('xdc.runtime.Memory');" L6 S- I8 N6 D0 s' R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* _+ s9 b2 Q( h3 `/ o
; ?. ]2 M( U- c. ?  b1 w
我大约calloc  每次共计大小为5K*16bits,
" d. Y. ^) T+ U; h4 k1 m而默认配置才0x4000、需要改大。. ~" S) E4 R, H9 L/ S2 w
, U- K" V) ~# v0 U8 W  ?. @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. q* B) J% y3 H/ O" e: NProgram.heap = 0;. \4 p% j. d$ ^- h
Program.argSize = 100;  /* minimum size */
: u  b9 |0 y5 v3 x( g9 r/ S9 ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 01:05 , Processed in 0.040800 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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