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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- \4 o) u! Q7 D1 ^* C# w
7 e; N( q$ r% R# [  x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 }, @( C$ \$ j

, X. c+ A8 \" G3 a其他程序段。。。。。
4 Y5 j/ ?8 `! @# P0 H4 ` / s$ T: ]5 `' b+ n* ]5 W5 {
   free(x_d);
3 g* w3 M8 Q! ^; t6 D1 s) ^" D$ w. N0 A3 w
使用DSP侧单独调试功能,验证动态申请没有问题,
" \) Y3 ~& T/ j3 ]7 j1 P# [, k/ ?4 P" C2 q; ~, l5 Y$ M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# h) s; u' a% c0 }( X

  G- ?, M8 ^% H% W- A: {1 C$ s. D2 O8 l0 B" b7 ?0 w2 s9 C
: [, J! u, ~$ N) }& R. H: k# I

( r* g9 |1 A8 L* l8 t, q  n
  ]5 o8 o- S& S  j* J  [8 l4 V# P  A: O/ ~2 b% O# S2 N& r
, t% N  z+ f1 R4 u+ |  h
" I0 h1 E" V1 n+ n5 ~
: W5 G3 C# g0 W2 O2 L& z- g9 m5 M
- q7 K8 [0 y: R! m; J- D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 A' k* S2 M& [% |% q  X) N1 O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 q& W6 d, \2 i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 [6 I  f- W6 f& W

: o  q& R( y5 a) U, [是不是需要在DSP.CFG中进行配置9 l# C/ z) ?+ L5 n4 J& A
我现在的配置为
; u, R& {' J" t) ]. K3 ]/ ?
1 X6 z) ?8 i! Y% l5 f6 e/*
( Z; b# t7 w; \, R0 O6 K: Y; Z *  ======== Operating System Configuration ========
) T* }) B1 d5 C */; x3 @1 U* G, g6 F9 ~& O

6 ?! Y; _, Q6 V8 h* L/* no rts heap */9 p2 M+ I$ m" p  S5 b* b
Program.heap = 0;
2 y, ~2 e: V/ o! r3 Z5 l9 t1 _Program.argSize = 100;  /* minimum size */. J; H, I) d+ {9 a( q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, i5 W/ `; o) f  `* [
% }! a( z% z# e" C# [0 b
/* create a default heap */
* ]5 \/ J) F) w: V' \7 l4 d  Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" `0 R" f* V0 jvar heapMemParams = new HeapMem.Params();
; Y/ I: R* l! g5 ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: R* S. v3 e/ y% ]$ h+ T& V  `# ~! I8 S5 [: U
var Memory = xdc.useModule('xdc.runtime.Memory');
$ T, i" E$ z9 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 Z* y- U0 u5 B6 W3 I: @/ w% d: q' p' |  W6 d4 T, e
/* configure System module */
8 W9 x) d6 m9 W8 P( r3 Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 I/ s6 Y6 F8 L! f9 ]9 D
SysMin.bufSize = 0x1000;
5 w( a& e! }& @$ gSysMin.flushAtExit = false;
3 v( ~! _3 B/ u; G9 m4 |  ~' ^' u; H6 @
var System = xdc.useModule('xdc.runtime.System');
( K; L+ a+ s# G3 BSystem.SupportProxy = SysMin;
( j+ ^7 y4 ^  F. q! d
8 Z' T7 v9 q$ F5 r/* configure SysBios to use the lower half of Timer 1 */9 W8 \7 X- v; m/ q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ S1 t5 z5 H: _3 O! q' F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! b3 i: m, Z: \* W) u
Timer.timerSettings[1].master = true;/ w9 B( L' s+ Q  V- J0 v8 P' H
Timer.defaultHalf = Timer.Half_LOWER;8 o6 m  k* m. q0 ]" U
Clock.timerId = 1;
" k  J: u/ N; J$ q
6 Z8 s% D) s( N8 ]. b
7 p3 @' ]" I. m  t3 X8 I) C4 d/*' R9 e1 V/ ~6 |# k4 ^9 d
*  ======== Miscellaneous Configuration ========: J5 ~$ q0 E" u, D  t
*/* v8 s8 T, v) n* G% `: v8 A3 y/ p

+ L" j# P6 t# d8 ~9 _* S/* set default diags mask */2 ~& d+ T1 c3 H# R( j
var Diags = xdc.useModule('xdc.runtime.Diags');: g2 l* i8 S9 k% V2 C; d9 `2 M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 |. `" d4 o6 n8 F4 X# f0 d/ n( ~+ y3 u  O& w; l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 p* I* c. N+ ]; x( x9 e! M2 [9 p8 wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 ?- c5 _3 |) [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ r; D4 _/ r# c7 t8 c
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% z  i4 k4 ^' s: o) A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  R# O8 L2 d& b  a" q- J4 {( G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" y1 P* y8 Y/ M- @  @) hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  b: t. O9 i$ [
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 k8 a* ?8 _+ U9 M- E0 Y5 x( r5 oDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! N! w' r% F4 z- @+ I7 f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( G3 v' X1 j% x% Y0 A2 H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ n3 ?3 M. R% h+ Y& _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  u) D. p, ^) h3 |( v/ KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 K! m4 h. d4 I. i6 l" ?; ]2 u$ EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ J! e9 T, ^$ w
- V" Z% R, n' n8 h, f& E: s8 D/* override diags mask for selected modules */; U- S# p% m' h# D( j0 ~
xdc.useModule('xdc.runtime.Main');
8 s# V1 \' m# O- W3 V: NDiags.setMaskMeta(
: k# g8 a7 l# @    "xdc.runtime.Main",+ b* t  j3 E  B: V2 j. F# m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( O& Y+ W0 J4 _: S5 V8 m, k! c
    Diags.RUNTIME_ON
8 r" ~, b* o6 f6 N2 _);
& M/ `2 ]) J9 B) l' T* N/ G$ z0 V6 Z5 P' A( y/ |( X9 `: E+ X
var Registry = xdc.useModule('xdc.runtime.Registry');
- T+ Q& p+ E+ m8 V3 A( yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! E" S; T# K+ U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 t  X1 Y  v! q! X0 _! g1 H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 |3 u, L( g9 v3 F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( z( I# T0 ^, R* f) _( z0 n

' [5 Q" E5 P+ r. H# J- l/* create a logger instance */
5 S% ~5 |% [- G2 Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; t5 P+ p6 _- G5 I. C. T7 Fvar loggerBufP = new LoggerBuf.Params();
% ^$ }1 \% ^+ EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 C: M( T% k, z. ~4 d  OloggerBufP.bufType = LoggerBuf.BufType_FIXED;( Z  t& V) P: Z1 L; V* ~9 K6 P

7 j9 c/ f- f& p% |( V% Svar appLogger = LoggerBuf.create(loggerBufP);
2 y) B, C! H+ h; h( l% ?# F0 VappLogger.instance.name = "AppLog_Core1";5 A  m# z* J$ R' \
Defaults.common$.logger = appLogger;6 Y4 ?7 D0 U9 _) q- B$ T# n; ]
Memory.defaultHeapSize = 0x8192;   
" s  x2 n8 H$ J+ a9 k$ L2 nIdle.idleFxns[0] = "&LEDStatus";
5 x  X+ J% [- p1 jCache.initSize.l2Size = Cache.L2Size_32K;( y9 r) O" ^. O8 m1 z- P1 {; ^2 O
# l4 J8 d( _0 }6 a: i0 Z& ~, l
回复 支持 反对

使用道具 举报

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 */
9 L# a! w% B$ Z( p' ]+ o# avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; d/ n% F! z/ m2 t. |# P: A" b
var heapMemParams = new HeapMem.Params();
* u7 }5 `1 ]7 l$ E1 TheapMemParams.size = 0x4000;" Q7 n; h" [, b7 p* p( K

7 R: Z/ R" @. @- Qvar Memory = xdc.useModule('xdc.runtime.Memory');8 M2 L5 I1 R& i  m6 X; T2 F$ L- g2 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 o# G& D/ D  Q5 {# o
3 j3 N! l& N* q- t5 v- c6 H4 n& D我大约calloc  每次共计大小为5K*16bits,
7 s9 X% X: _- p% _0 E( ^/ {/ Z而默认配置才0x4000、需要改大。8 U, V6 Z9 T4 Z: a: t6 J& E! O5 F

4 Q( f. a8 _2 \- T. u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 f  }  S7 x9 n0 H. |
Program.heap = 0;, P) g3 n& X( T; ]' u2 j! X2 F- N
Program.argSize = 100;  /* minimum size */9 u* x' F/ }- _! m3 X
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-28 08:41 , Processed in 0.042415 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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