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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 U! Q2 K. u% l) R5 ]- w
8 [* d1 |/ b: v/ R6 ?5 s; @" p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  m; |0 g# z) n

' o) u& Z" s) }! q4 {其他程序段。。。。。
  z: R1 E+ b& t* _& G& p 1 F$ L. _- A4 m5 e
   free(x_d);
* {( r6 V7 }* F1 J" U4 c# r* U' H2 U
使用DSP侧单独调试功能,验证动态申请没有问题,
2 o- F  z& [; P" G" {# J1 k; E* j& ]$ e$ m" N: t- n. w1 a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; g) S6 [7 ]5 p# |. \

5 H- N& @% h% Q, S7 r# M. K& K" z$ P* R' G) H# A

$ w) A. c: e6 w" @) f# ^! Z# Q& v4 v5 R5 w* r$ {9 H* h; @: {
. g0 d$ R( R, i
( j8 A0 w  \! G0 I* _  A6 F6 s# N
8 \( y3 e' u8 e( m
( t6 w5 U3 p5 M$ ^4 A+ C0 W- N
# D( k+ e. ~+ E4 |& L

- ~5 G  @7 x4 d* F$ k  e/ E7 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* [/ e1 z6 K8 p& O* w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& V6 I" b* |2 w/ H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; r* V; {0 P. x2 b- c+ r( _
. _. N/ q6 W2 i  S) @& h( i4 [
是不是需要在DSP.CFG中进行配置
, \5 H" o, J( k# `3 ~我现在的配置为
6 S( @+ B; J, |2 Y+ t' [' |7 d# y; s2 O* x! c. ?
/*9 P4 H0 U9 Q5 \' p
*  ======== Operating System Configuration ========5 e" P& l& F3 X3 V
*/
2 `2 F( d. h, B: s$ H+ h: L
8 ^4 j, N9 `+ }) w( J# y! p- {0 U7 J% y/* no rts heap */4 c, y; Y( D- w2 i1 b
Program.heap = 0;, |9 w6 _6 B2 d3 A, Y
Program.argSize = 100;  /* minimum size */& h# R3 p8 n. z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, t/ Y2 J1 n. z, B! z- l
4 o7 j* U! |+ o6 A, A0 \+ s/* create a default heap */, J' b9 N( `. s& s! y; v+ J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 q3 i% p; h! }var heapMemParams = new HeapMem.Params();( L3 f" Q( R) X! b; J; ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ n+ B. W7 Y( r. X& p
/ G# I  l0 M" C& i
var Memory = xdc.useModule('xdc.runtime.Memory');
. W; J5 c8 f# s* v# JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 J/ h1 i/ x1 S% p( B! H
% w; S) ]* j+ h1 a) u
/* configure System module */
) l, p: P3 e0 n6 ^3 t3 z2 Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');
6 z- B4 Z2 v8 DSysMin.bufSize = 0x1000;
0 A, g3 H" e; FSysMin.flushAtExit = false;
' g9 w8 g# u4 f0 P; j4 `( c$ T  ?0 G9 J1 n. Q
var System = xdc.useModule('xdc.runtime.System');8 i( h8 m# t& U9 `# B
System.SupportProxy = SysMin;2 p7 L  P- q9 s0 S* y
6 @0 D" Q( \+ \7 L" u, Q
/* configure SysBios to use the lower half of Timer 1 */
! v' A4 Z0 }7 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 {. x' W2 m5 u4 D9 N8 h6 g  J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. s6 C5 ^6 ~5 I; J1 q, A
Timer.timerSettings[1].master = true;
1 l8 p+ j( O6 @) T* F: d9 M! O/ |Timer.defaultHalf = Timer.Half_LOWER;# q, S6 ^, n5 c. y
Clock.timerId = 1;
: U+ Y4 u, O; x6 D9 `" Q. e! o: b6 z- w9 H+ C* W5 @) T/ r
. m: `7 E7 G+ A
/*
' [4 w2 p+ q8 r$ @ *  ======== Miscellaneous Configuration ========3 P! B$ K2 K7 z* E1 H+ I5 D- I( s
*/3 x; T# B# ^6 u0 Z- V, b

; c: o) Y9 f6 d. d& ^0 ]/* set default diags mask */5 M5 S; u9 K7 T2 F5 m2 u
var Diags = xdc.useModule('xdc.runtime.Diags');$ y7 t! D' A8 [! t/ d+ s! o
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 f+ k3 G9 C; X. i
/ ?* B" G2 m1 H) v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) a$ Z' T; i( \9 D/ U% B' oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% u0 c9 a! S% g# y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. y' T9 o' u& T9 oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 H2 ?- c2 ]" d) D! P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 T: k4 [# d+ C- K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. \5 r0 B4 [& b) j% \! CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' P+ V/ f! Z0 Y0 P% |: J/ \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ S6 l2 G0 `  m3 C, q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 w4 p5 L4 o' i; Q1 j3 G) nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 B9 R, {: i3 N: A) k
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 v2 A/ l! j5 x+ O# |0 oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 t: H6 [, j" B% q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 I7 {8 H3 w/ T# l1 H# uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( r( \) S: ]: ?% J9 e& ]$ b8 G; A6 K2 `; K
/* override diags mask for selected modules */# `& S; }% p# z" s2 P
xdc.useModule('xdc.runtime.Main');
8 u% r/ b/ O& UDiags.setMaskMeta(
' s5 I9 b: P1 x* f, x' z2 r( C2 p( Y    "xdc.runtime.Main",: ?) b5 A% x8 _' I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% k/ l! P! ]% c9 U6 Z$ k
    Diags.RUNTIME_ON$ z1 \6 y, ?6 f/ l
);: b9 m8 L. `# O: g! o
! V+ \) Q9 {; R# D$ U
var Registry = xdc.useModule('xdc.runtime.Registry');
: U' n, G8 j) J# Y8 r0 j( fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, Z( Y; B" C4 v2 a* ~* x; x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 ?" L7 P7 b# z) }3 P5 V3 l3 z  GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 f6 Z$ U+ V* }4 zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 E' K* ~- o8 l: m8 S$ w1 H- Z/ x( X  r& a  ]
/* create a logger instance */7 d9 s( X9 y# V3 r/ H! ~; q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& J( W7 z: m3 I) l( Q( P3 @var loggerBufP = new LoggerBuf.Params();, U! ^& {* u" U3 m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 n& l% N/ u' i2 i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 j( O) k1 y. t; k% f# p& }. [6 @1 ^
) ]2 v0 w, E# g, K% b
var appLogger = LoggerBuf.create(loggerBufP);
5 A4 }$ c0 @' _appLogger.instance.name = "AppLog_Core1";
7 W& {" g2 X. r8 EDefaults.common$.logger = appLogger;
0 z4 I. J  t% d5 W, H# ~. YMemory.defaultHeapSize = 0x8192;   
; Z- F9 J% ?/ ZIdle.idleFxns[0] = "&LEDStatus";
  ~8 K$ W% y8 ~1 F9 mCache.initSize.l2Size = Cache.L2Size_32K;
( C% N" S9 w; {: {7 v6 m" D% z* z, n6 d2 C4 G! A) R6 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 */
+ B- W$ F. [, I$ i3 Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 ]" H' f* P, K% p0 K/ avar heapMemParams = new HeapMem.Params();
$ I. `4 r7 `/ N0 a9 {' p- OheapMemParams.size = 0x4000;
  u5 K4 r1 V7 Z- G# ~0 Y
, A5 `, ?( F% s) L' P0 Tvar Memory = xdc.useModule('xdc.runtime.Memory');0 {5 n: l7 K5 B% k. @7 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; \# W6 B7 g0 U4 S" W. z7 ^1 R) `3 R6 _) l' n
我大约calloc  每次共计大小为5K*16bits,+ H1 v, Y7 i4 B
而默认配置才0x4000、需要改大。
$ n6 ?8 M3 X; e' P7 A3 z$ c8 y$ g& N3 {. V+ V0 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 k% U4 z) b2 j- {6 {5 c* ^2 s% M
Program.heap = 0;
& E0 u5 T2 m9 E) IProgram.argSize = 100;  /* minimum size */
. @8 p$ m# c* j9 w* R3 WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 21:48 , Processed in 0.044662 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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