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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ ^4 f8 O. [" g* W* g# U5 ?, ]
) v- G; K6 V) v: C, l) d0 e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 q4 [+ Z9 @/ f

, ]5 S* o# j* C9 h其他程序段。。。。。
& h0 D4 G: |+ q/ y7 B9 o$ k 9 t. K1 s8 R0 [+ r! o4 S/ b
   free(x_d);  b9 p5 B/ `' Q* l' l  J2 b

6 I* Z& ?- K3 a' b使用DSP侧单独调试功能,验证动态申请没有问题,: h, b1 @& {1 ~/ g
1 ?& N' j' A% E4 `1 W* J; F& _
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 z9 U% v7 o! Y/ M% w
. v' t# G: x; F) \" ?3 E& ?" g+ B
* K' z+ i  w0 f# W# z- p

0 X9 {0 E+ ^$ J/ `) E; k( Y2 ^) }: Q) D% n& v& p- W0 w$ q
" w1 N1 z& v2 c0 X' l
, @, b( R/ x- f

9 Q9 T" r, n1 ~9 e$ D
7 n& ?; u# j1 R# E3 l; O/ V8 Z" F) I0 T
- E5 v' D6 A7 `" j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 L7 O1 y1 c( S  \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: p4 [7 n& ~; `5 _  B( F" L
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- \* _* R% v7 r+ X6 }! H- c6 B( \% G

, f! E4 |1 s8 F$ Q) `. A6 G/ V& N是不是需要在DSP.CFG中进行配置
( c) M" k: g& {& a2 |& {* ?* I我现在的配置为/ G# O/ H9 E& i2 o8 V

, s6 f, d  ^( f* |/ `$ m/*
+ ?- _6 ^" L5 L  k' |( d3 Z *  ======== Operating System Configuration ========+ r+ A# a9 _  s' u9 V7 c# k
*/
8 n# f7 V1 O7 d: H0 C- X! I
1 [' }" s  x$ b5 y2 P) n4 P/* no rts heap */+ U! V! N5 ]6 M1 o$ S, `4 W
Program.heap = 0;" w/ V' ?2 y2 t$ l* S3 P9 E/ v" U
Program.argSize = 100;  /* minimum size */
6 i% D9 x8 L4 h5 F/ V/ ]& }3 BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 S  B; V" y9 |) J
, p* e: J9 G9 ?/* create a default heap */2 M5 X7 R7 _) V& |$ G, q/ |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; N  i7 n$ K$ o( G% |+ N
var heapMemParams = new HeapMem.Params();
) _9 h' b3 U. N  B0 O2 B* kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 G0 R: _% z; o! |; f& W' x' ?- R  u4 U8 {
var Memory = xdc.useModule('xdc.runtime.Memory');
, S9 C, ~0 T& ~1 ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 Y7 F$ Q8 T7 r# v3 a. h

2 b5 @% f  g1 q1 r/ M" e6 E! W# \/* configure System module */; b9 B4 \! `% f  N
var SysMin = xdc.useModule('xdc.runtime.SysMin');, A7 v6 C' w" t7 c1 H; ^
SysMin.bufSize = 0x1000;2 A# ^  M" U& z' i9 d; I( L
SysMin.flushAtExit = false;
4 |+ z0 G8 s! b) b/ e
8 X# ^) h4 o. I; b4 ?2 r: q2 k/ Ivar System = xdc.useModule('xdc.runtime.System');0 P. p$ U3 }4 s& P
System.SupportProxy = SysMin;" N- G  y& Q1 q. z: o
) i; q0 e- z4 A. z
/* configure SysBios to use the lower half of Timer 1 */
' s9 T: e' c, m! |4 ]& Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 x0 `! u- t8 ^
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 O9 n. B% e% n- ]" b# x& ?- f
Timer.timerSettings[1].master = true;4 F7 ?# |; k- L6 ]. o7 B( K
Timer.defaultHalf = Timer.Half_LOWER;
* A! J3 r0 ~' O4 C+ r' K3 }- FClock.timerId = 1;
3 @. y! R3 v  d' {  D5 i* V" {- {% b" d3 |$ [5 ^& f
8 i1 p$ K3 c* @( G5 X0 i, t
/*
( P$ ^. C/ s0 I( f *  ======== Miscellaneous Configuration ========: f$ E3 Q! _, {/ e  E1 c
*/
. Q1 E! p2 E. V3 h) X6 k3 M+ a. |' b, T/ J- }1 \* a2 `
/* set default diags mask */( a' u- p, e+ B  g' t  B  P
var Diags = xdc.useModule('xdc.runtime.Diags');  |1 y( M( c$ P/ _: Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% |5 v# S, Q' O9 l. k* E, N3 ?1 q' Z/ n; X5 B: U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& A- E4 E/ b3 w; ~- TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 y7 S! _/ j4 t7 M) JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& s! w9 |! M4 `+ _8 A2 [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! s8 I. i, H# m  _+ f% J" @" [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. S/ n( y- ?  k7 H/ O' R5 }. kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 H3 K6 g" ]3 K: }, YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 {/ I0 a0 ^0 U' i) eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ h9 P8 u3 {+ O1 o. y& B, CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 u  D: l  W" c/ P; tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' I6 K, ?  x" R% L* ^. A  \6 m4 @# DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 i  d2 l( h3 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. u0 H5 |9 S9 _( a# f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 w( B- t+ D6 I% h. ^7 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: H  E- @" x3 |: Q/ _$ s  t) X( v8 W; G; Q9 y
/* override diags mask for selected modules */
+ l* D, X1 e6 i# E+ U4 Uxdc.useModule('xdc.runtime.Main');+ L& h8 }9 }# b3 }$ j: \
Diags.setMaskMeta(
3 [0 y9 j$ A2 z# H  I4 x    "xdc.runtime.Main",
0 l& Y0 c8 I7 x# F9 |. `- ?    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 P6 h* X4 w5 h4 r2 T/ }5 d
    Diags.RUNTIME_ON. d0 I/ d0 r* N  |
);
( L( z. u3 r$ v) x' i6 h  z
4 \8 ?3 r1 ]- I5 O; _var Registry = xdc.useModule('xdc.runtime.Registry');. n/ ]  F- v" S2 o& B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 m0 {6 @4 k  A* JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 z4 @4 R, S' l5 G& A0 ~8 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 G7 M; f. o* R0 U3 w  ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ q6 R! R( ^6 I0 u
* `, O4 F& L: U% k/* create a logger instance */
  Z: F8 f2 M+ r) Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- K  l, z% b  l# b
var loggerBufP = new LoggerBuf.Params();* o1 \* c/ ]1 q0 l2 `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) q& l! S% v$ A' r  n% i9 s9 c% DloggerBufP.bufType = LoggerBuf.BufType_FIXED;) J6 \$ m* K7 a$ R8 c: L# i( O

9 o; T7 O! R6 N' xvar appLogger = LoggerBuf.create(loggerBufP);. f  E" u  q6 X
appLogger.instance.name = "AppLog_Core1";
& O3 @8 g) I" b# s5 p4 cDefaults.common$.logger = appLogger;' @$ ?8 I9 D5 |; i7 f6 w
Memory.defaultHeapSize = 0x8192;   
% G# Y; u  w1 E; M1 M( [" V' V+ lIdle.idleFxns[0] = "&LEDStatus";
4 z) [7 J# ~& d( qCache.initSize.l2Size = Cache.L2Size_32K;2 q, u0 e! f6 U) i2 }0 l. `

; K" z9 i# A; s, ~# i' ?1 h  i
回复 支持 反对

使用道具 举报

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 */' ~) V( v* Q1 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# N# n% [6 K6 A* C' X
var heapMemParams = new HeapMem.Params();, o4 Y0 ?- w+ Q
heapMemParams.size = 0x4000;/ W" Y: D4 M5 o( m8 O

# k4 R# i) L3 p0 j2 }& ?var Memory = xdc.useModule('xdc.runtime.Memory');
  _) n; k& P* ?4 r7 LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& @4 J  P! f4 U: D' t, U9 Z' i" b1 H3 D7 `+ ~: C- y; E
我大约calloc  每次共计大小为5K*16bits,* e; [; T$ P$ i0 P: n" K! t6 u8 l3 K. w3 P
而默认配置才0x4000、需要改大。
  l: `: [1 C+ m( d" k) h2 o, ~5 v) X  N4 {" k# H0 x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* c  o8 n0 \3 r2 dProgram.heap = 0;8 f0 n0 J7 H8 y2 ?
Program.argSize = 100;  /* minimum size */* `8 j, r4 e) U2 B
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-23 08:32 , Processed in 0.046555 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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