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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" ~# @1 r' x* N3 t9 E5 o& I
9 H* p' V8 e1 X. s. S8 ~; h% [- j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  R+ ], \, Q2 m0 q9 ~

& P) v) N* w- l其他程序段。。。。。
" w7 {8 V3 R& V0 e   z& Q& N9 V& V8 `+ l
   free(x_d);! {" _6 _9 }& D5 y1 j- q6 e
: u( S( }) v/ y% R2 m1 j
使用DSP侧单独调试功能,验证动态申请没有问题,/ |) P$ |# ^8 }# I! U& ?+ e" A

3 j1 y8 }# m/ A/ @  A# }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ a0 q. R7 T  S4 S) Y$ ^

% X. e8 z0 S/ n$ }4 Y+ i: m$ f: ^) m  q0 i" }, D8 p5 f
+ Q" ?) v1 {. ^- a1 N

& h: d9 F* h; [: e/ F) S: _6 x6 _$ ?3 q
: t  J: L9 O$ n0 z  S

5 S2 X* k+ L9 F/ q3 P/ T& _
- ~1 R1 C4 u. @% d6 ]
6 e1 A" ]# ^! m7 |% a5 P9 l0 _! d7 i7 V& u- T  ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: S+ l' z9 E8 o+ V  |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. T& H  o( t% p) |4 y8 |! [$ h: F* P% V2 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* w+ D* P- a9 G  V4 w- p' f
/ O9 M0 [( m! i3 ]9 a
是不是需要在DSP.CFG中进行配置
0 d! N4 g7 z" @我现在的配置为
/ E4 [, V8 l0 q7 v2 z. h% t! P2 K/ W/ [: Y2 t; L+ y
/*, X3 r) J) [5 L( A' V- `- t
*  ======== Operating System Configuration ========
# _  U/ k; D* C+ ^' J */
& N9 P8 }  q; W" S8 E3 ~
+ L8 u+ v6 A7 Z, g/* no rts heap */# U0 K  i, L4 J/ }0 h. I! v
Program.heap = 0;
% [' z; K' U8 j" G; B& H9 J  T% E1 ^Program.argSize = 100;  /* minimum size */  n- `6 V1 F" S" {8 S. e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 t/ T7 {1 D8 Z5 j  U" f1 z
9 p; z. U0 a3 k# B/ w% m  P
/* create a default heap *// }, l$ J7 L# {" ^/ w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# k6 p1 ]" v8 z. I# m6 @( ?
var heapMemParams = new HeapMem.Params();. @: _! m/ `2 k% {0 a3 A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; N/ V! P- l2 g
# G0 ?2 T7 D. P% B
var Memory = xdc.useModule('xdc.runtime.Memory');
/ t5 f( O1 a% K# S1 D/ VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 K) c9 T% q. S. O' \. s6 r( D. q8 m0 \' k. o9 Y/ L/ c
/* configure System module *// n! U- g2 l* w1 j  G
var SysMin = xdc.useModule('xdc.runtime.SysMin');( O1 I9 o7 n1 |8 A' K
SysMin.bufSize = 0x1000;* g) V" p/ N+ s8 u, l2 F! `6 ~
SysMin.flushAtExit = false;& @% @; ^( S! {2 D6 m9 }3 O6 c

7 [3 k8 x2 T. d. e( n' Cvar System = xdc.useModule('xdc.runtime.System');
) p' }2 g4 p1 \  ]7 LSystem.SupportProxy = SysMin;
; l* A% \1 T/ m9 p  ]' x
: N; B" i- W! T' H/* configure SysBios to use the lower half of Timer 1 */+ k7 v" C& a' x: ^* K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ U8 B- d" c7 V9 `) Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 P% ]6 X$ c: l# q. |0 GTimer.timerSettings[1].master = true;
, N/ G0 {- z( F. s! @Timer.defaultHalf = Timer.Half_LOWER;8 w: t! e) I# j4 z" I8 s$ \
Clock.timerId = 1;
6 G& t! @' `- f6 d
2 m8 b' f: X  K
, Y+ S! v* E9 r9 a/*; K' N' f, ]; G( C$ T
*  ======== Miscellaneous Configuration ========
" M- `. A( }- w# b/ s# T1 [! ]# U */7 e; v1 t, P. u- O

- E: l) ~: z  P: ~7 N/* set default diags mask */
# g4 y; Y& J8 j- Kvar Diags = xdc.useModule('xdc.runtime.Diags');
  n5 q# o' q& U$ m2 avar Defaults = xdc.useModule('xdc.runtime.Defaults');7 Z. o: {/ N! g/ E$ s$ ?/ N( t
2 m2 u1 B8 k6 g! |6 B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# }1 Y5 Y$ a5 q* z. J; [( |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ N4 i4 T5 p2 p: Z8 P, P6 ^; u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ z( b3 j3 a: x# J" e$ |* D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 L/ B0 S2 X4 b3 h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 k. l: E2 D& n$ O; N- uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 Q" a4 e5 A5 q1 g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; Z; z/ e4 W: oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" G6 D0 Z! f! n( A+ c9 O6 C- IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! B( l$ }$ o, q* `" ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; `* e( `  s" n/ S0 V5 d+ P4 I' G+ o4 {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) M5 O% X# y, P3 q. d% jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* {1 E+ l2 M& ?# n6 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 W/ |  \# v; ~5 B8 m& mDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' H2 T& l+ I" t; q$ \
( u' @8 B- u0 T4 @) I5 v/ l9 J
/* override diags mask for selected modules */) U4 x9 r# i0 Y  Y! D0 l0 G- U) ]
xdc.useModule('xdc.runtime.Main');0 ]2 D, i+ n! x
Diags.setMaskMeta(
, f# F& z% ~9 i( ]. C    "xdc.runtime.Main",# B; i* _) O' E9 V# @: x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ y* d- j7 a# h" X& m; G
    Diags.RUNTIME_ON$ X, T4 U) g0 R6 {! Z
);1 d( B. r5 K( Q) |

6 P4 @) }* k, T6 j6 P0 a1 Ovar Registry = xdc.useModule('xdc.runtime.Registry');
$ A) S5 E4 E" u1 qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, h: u- M; d/ \# g- Q2 _  V6 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, G, Z7 r# M& D) a7 G2 M. g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 F3 q& d2 p% d' Q  O5 i/ VRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 X3 X5 ?% S3 w( {8 p& B

* B" G8 A7 v4 r: R+ P" S6 E/* create a logger instance */
$ B& V) j4 S5 i2 i# avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 c0 g& ~' W, A0 Z/ Y# y; zvar loggerBufP = new LoggerBuf.Params();
, x5 i6 Q; s8 a- XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, m% X  k3 V1 H& r& z" q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 G: L5 Y7 V9 Y8 a  I

$ Y/ q" b. [$ t, m& d/ C+ Z9 b- kvar appLogger = LoggerBuf.create(loggerBufP);
) Y) O8 t0 _. q8 ?/ N9 VappLogger.instance.name = "AppLog_Core1";
) k5 a* @: |! ^" \Defaults.common$.logger = appLogger;/ I$ l* A/ L1 U, Z4 L
Memory.defaultHeapSize = 0x8192;    + n) `# N/ V" y( G+ C
Idle.idleFxns[0] = "&LEDStatus";
4 c# c+ Y( t; n- R+ O( H1 zCache.initSize.l2Size = Cache.L2Size_32K;" s+ Y) p2 N. t' {4 T

0 g+ q: A2 q9 J4 [
回复 支持 反对

使用道具 举报

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 U. ^! U5 l$ u* S( M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 Z1 |( ~7 q0 l5 I  G
var heapMemParams = new HeapMem.Params();4 s1 W3 q  T/ B1 B8 w* E3 g- g  G, D
heapMemParams.size = 0x4000;
7 h% J+ x+ _' w2 g4 E) V) o0 M) [; s% }" Z9 A0 }4 w
var Memory = xdc.useModule('xdc.runtime.Memory');) R5 d: g; ]0 e: Z3 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 q' y" d& ~5 u) J9 }7 \' M% _
# c1 ^) u& c8 a/ t# \" j  p我大约calloc  每次共计大小为5K*16bits,
2 r7 T3 Z6 j" R" b  D7 J; E2 A而默认配置才0x4000、需要改大。
( h1 c5 q4 g* k
8 ?6 r* X# l  o6 ]( N* h" O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) d  w/ s) v* e. L. C
Program.heap = 0;( R! j# D; ?, i& c% i' H+ Q" p
Program.argSize = 100;  /* minimum size */" O. Q. e& Q" i. _
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-28 19:43 , Processed in 0.042435 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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