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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 W0 o! n3 ?) I+ Q0 z3 |
1 U$ K* K. m8 j# s& V2 V& W: b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% H7 G! A" F1 ?+ ?0 m$ r5 W: ~% M
5 M6 K# ]7 m) b6 }, |
其他程序段。。。。。6 ^  R0 ?, E7 P# {4 O% d: i- i
4 {4 w+ L4 U# b) l
   free(x_d);! O7 R) ^8 z- F0 @* X; }
1 Z3 g8 p6 [& W9 b
使用DSP侧单独调试功能,验证动态申请没有问题,1 f& R9 f0 W3 F& ]: v

2 G; H& _0 x. h8 A: n2 O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' ?4 {$ I2 ]) v; o7 b* v8 ]

0 @0 s7 q6 \/ }' U1 G) @7 Y$ D. L  B2 l9 P% g

& _* E  L2 ?3 Z# t) a/ T& z% B8 f. y, A8 v

4 g3 c4 v2 M6 i. q1 _/ E& `7 f6 Q# |% S. j$ k8 _& h

7 B# X4 n  l3 B( f) ^: R& J7 S& j* v' [/ w- {

" R7 L  h6 ^' y9 d$ {
& |0 J! v4 m; U4 X! D( g5 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! c5 A- i* |7 ~7 y) x1 \# \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) h4 L. e& _0 [  |4 V  E; u- U" Z; G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); w8 ^# `6 }, e7 ]6 D, b

' ^. L* `5 X/ |5 z9 ~! @是不是需要在DSP.CFG中进行配置0 Y0 G, l% \9 t; r
我现在的配置为) E; Q$ b4 ?) x0 M2 t
$ Z' Y% S) g3 q. ~! Z
/*7 p, S* a7 K; e: k' |: }
*  ======== Operating System Configuration ========
( W, H7 P* H6 h# G7 k$ c2 ^ */
8 k0 ^: R) r- `+ k" o8 ~
2 i! x# D6 T, y8 c% ^/* no rts heap */
. \% ]6 @2 k1 X. r) Y! pProgram.heap = 0;7 P. p( Q# O# M3 }2 ~' a
Program.argSize = 100;  /* minimum size */0 e, Z8 W, x1 R* h' y% b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" D) q7 G! Z# h1 K) K
* N' D( C7 k0 C
/* create a default heap */+ a8 M# _0 ?/ j+ s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. R5 J2 ~+ z/ [8 P# }0 w+ |
var heapMemParams = new HeapMem.Params();
/ ]4 f  X/ h2 Q1 s) W- GheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" s8 X, O6 w$ g- z
4 w! ~$ ?* M1 F8 g+ K
var Memory = xdc.useModule('xdc.runtime.Memory');; ]6 P3 I7 ]1 z, U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' q, w8 @9 G' W. h2 W
4 |1 C- g. y( f- n" K
/* configure System module */& {8 w. j( W& L! V) g% H, |
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' |' P5 i. j/ \) H, F" k4 eSysMin.bufSize = 0x1000;
/ U1 B3 b- I' z+ {3 f4 XSysMin.flushAtExit = false;! O. G6 b9 C- z5 ~
* g; u! R1 y) v  J+ s
var System = xdc.useModule('xdc.runtime.System');$ A7 o/ z7 ?* e5 z8 _9 T% _
System.SupportProxy = SysMin;' j' d2 {7 p7 U7 p! x- Q5 M$ h1 t

; H0 a+ }- {$ K2 r6 f$ P9 g/* configure SysBios to use the lower half of Timer 1 */
7 Q  }4 J1 p9 u8 J  wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ Y( L2 m& h8 k* ~4 ?7 x3 @% S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' p4 Y+ N( h' E( c$ S9 ETimer.timerSettings[1].master = true;# p" f  C+ Z0 n2 F+ Z: u0 C, p+ Y* E  T
Timer.defaultHalf = Timer.Half_LOWER;
, D9 x4 s! _* R5 P+ w# L! N5 F) UClock.timerId = 1;3 ?! E3 f+ @( k& E; n% g/ i6 A
/ ]" B1 o: ~) Q/ A* x

8 f4 R3 G/ O3 A/*! g5 ]8 L0 H' a5 v4 o
*  ======== Miscellaneous Configuration ========
; ~1 `  X! p7 d  o */& b$ x4 V' ?& X* z

* i) U5 P7 E$ i/ O8 j5 C( [/* set default diags mask */
( O$ l3 E+ F. }$ N6 [+ H! `var Diags = xdc.useModule('xdc.runtime.Diags');
9 @  A5 ^, Z- b5 f: ]var Defaults = xdc.useModule('xdc.runtime.Defaults');9 _  t' i6 D' }  N3 f
& H* g# S' q4 ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 M  ?8 W5 R- o5 k: e3 mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ W; ~6 O- |4 H3 p* sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. m% L+ f" z; q6 J: KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ ]" {& V) o+ n3 l) wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, o, m: c+ [! m' U! n( |0 lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: b# y6 z, \6 u' n# o/ f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) @& o( d0 t1 d3 b; u' J# R6 PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 ~+ O- P$ Q) H4 P8 R6 e) M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: c/ B  ?' I  h3 a. g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( y; U$ D; a) {# X9 v: SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( v2 T) t2 z0 g* p& X- g/ e& ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 B4 j" ]& p3 p$ E. k& b( yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 B) ]3 z, D( m0 y3 O2 iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) U9 L( K3 X4 Z: Y0 r
' x8 w* W9 M' G  u( N1 }3 o
/* override diags mask for selected modules */
" ?% j: ]# g3 d# L6 q9 K; Bxdc.useModule('xdc.runtime.Main');. {0 ]9 V6 C# n) d9 E% y
Diags.setMaskMeta(" H) [. R5 I$ N' b! U
    "xdc.runtime.Main",/ Z4 `+ z" p/ p; S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ t3 M8 y7 F9 Q) K  ^    Diags.RUNTIME_ON
' U9 R1 O- N2 W);3 c5 z8 ?/ M6 o5 s8 d" P

! y8 B/ P7 V5 Z3 D& n/ evar Registry = xdc.useModule('xdc.runtime.Registry');
: f/ T* Z$ y# c3 fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 O8 z& q& i5 C+ @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 }7 M$ V7 F: |7 v5 o1 V2 E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* u0 F* l: O) o+ F! lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 v" t* d' L* z. P
( `4 u/ z; ^4 a, F8 D5 \/* create a logger instance */: S" y' E$ ^( O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( N2 F$ G9 L& S0 z$ k, ?; D% Mvar loggerBufP = new LoggerBuf.Params();
3 K, P( u: w0 S- K  b1 f2 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// b1 }* \5 C: T$ u" D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) O9 O% i, W+ W  \5 N8 P( }/ q, `, u& M0 m
var appLogger = LoggerBuf.create(loggerBufP);
4 ]/ M. P8 z/ m$ |% qappLogger.instance.name = "AppLog_Core1";! A& L: l) X% g: G$ {; y' d
Defaults.common$.logger = appLogger;
) f% X5 q7 M- A# ~$ T) `Memory.defaultHeapSize = 0x8192;   
* h; B, x4 W, V6 E/ WIdle.idleFxns[0] = "&LEDStatus";" E7 O! x; |5 W9 b1 t  ?0 D5 z* Y* p
Cache.initSize.l2Size = Cache.L2Size_32K;
4 x0 r% S1 I1 l6 t7 f, u, D$ p4 Y1 B8 a9 Y! L0 d: [) B
回复 支持 反对

使用道具 举报

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 */
# T; P2 p7 \2 k& k8 E: A' cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) S; U& l5 ]) x) J, P( R" Mvar heapMemParams = new HeapMem.Params();$ v- c/ B3 o& N
heapMemParams.size = 0x4000;
& q, B! o, R* z' X- f( h" A# |6 q# D, F1 n' }3 E
var Memory = xdc.useModule('xdc.runtime.Memory');
3 |& B0 o1 D9 f/ KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; o9 J( H% S! u" H3 D: X

6 u6 D. M% j2 i& G2 T0 I- b我大约calloc  每次共计大小为5K*16bits,
* f1 z  Y$ X+ b+ V1 l而默认配置才0x4000、需要改大。
6 ~. n) U6 X7 B* l5 a# }1 Q' M, ?" G
4 v/ k: Z5 `, C+ z, h8 m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' D( C$ u6 m. Z% m; X: _Program.heap = 0;4 {$ j4 y4 U: k/ p  Q$ g9 b+ y
Program.argSize = 100;  /* minimum size */. N6 I, `. ]* C( _1 c8 P  L, K
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-5 14:35 , Processed in 0.041559 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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