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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 r2 A/ V1 A  L% k5 p! i! j* T

' |8 e# j2 r$ d0 ~0 N9 c& A    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 [/ o% j. f3 I
; H% O9 Q& v3 k5 R3 h4 z" V) G
其他程序段。。。。。
, ?% {7 M$ L0 E% |. e; B
% h! ~/ L! o' }9 w% ^! e7 K   free(x_d);
5 g- k! y1 v0 _9 Z0 I# l1 D* _" p0 I
使用DSP侧单独调试功能,验证动态申请没有问题,9 F8 x( o5 `! B  b

8 H/ u5 u/ }% I$ ^4 Y* F6 x6 L  Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' a# X- r! V9 t

: I' `" T, J, D6 b3 T: H) a/ w: k9 I

. |6 I- V! V* K% ^
; Y+ M: I/ b* [8 `* [$ L: S) \6 Y  [2 Z- T1 \% L9 `+ b7 N, i5 ?, P
, Z* `  ^% x- s: t
( o9 m4 }7 e- L4 P
0 G- G' d: K' I9 Z' W  [1 S; `) ^! y- ~

4 E) r' u7 g$ W. B4 L$ \  ?1 w# z, B: y7 M$ @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 _3 B+ [& a# m+ \. p: ^7 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 u3 x! E; {( L2 s+ X1 `/ ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 F/ ?1 Q6 x' ^
; w0 [" z) n9 u+ z+ x+ o; J* N
是不是需要在DSP.CFG中进行配置8 U8 K, N. m2 J! {# E
我现在的配置为
) }! Q# }5 V* l: y) K& A6 I' U; ~1 [. [1 G
/*/ y* w: T* R5 E( o- E* p
*  ======== Operating System Configuration ========
. j& q- W4 B) p */0 D9 _( i2 y3 b9 Y

% p1 m7 q, U! n/ r$ L1 e& N/* no rts heap */8 a- C7 r9 @1 ?/ E
Program.heap = 0;6 u) u' W' T: t: n
Program.argSize = 100;  /* minimum size */1 d% S( t3 ^; N& z: r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  p; F% T3 t; u0 E+ A
, {: P4 v& R$ e9 _0 S  i$ g/ q/* create a default heap */& q2 F* R0 l6 i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; E4 q4 q4 m# pvar heapMemParams = new HeapMem.Params();- \9 b+ u0 p' \% F! @- p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- f+ O0 C9 p' L% Y/ m  O: ^6 l3 S' T5 j5 Z( `
var Memory = xdc.useModule('xdc.runtime.Memory');
- A* S  g0 E2 \) _9 {, `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ D' d7 P4 a, {" @( \6 n4 e  g
) Y- @, F# O. y5 L" d( y# i2 i/* configure System module */% W7 Q3 A2 n! F1 Y% ~6 A  ~0 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');) _/ q1 ~5 C( E- M4 A' t! F
SysMin.bufSize = 0x1000;* U) Y! `# ]" s2 K
SysMin.flushAtExit = false;: c) |+ a% R, M! c5 y! w% p( q1 w
* y- ^9 I/ q6 q9 y9 l) G
var System = xdc.useModule('xdc.runtime.System');! O5 Z  K1 P+ ~4 ~6 g$ i* g1 E
System.SupportProxy = SysMin;
1 @8 A1 r0 ~8 U7 n- [- W3 \2 \- A% P# J2 c7 y- V
/* configure SysBios to use the lower half of Timer 1 */; |: R& r. I9 Y( r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 [2 B9 R7 H8 C4 g  x4 n# a, Y" ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! l% w+ y( a- y2 ^* M( Y3 \Timer.timerSettings[1].master = true;$ Y$ a- a1 M9 i3 \6 O* i- t
Timer.defaultHalf = Timer.Half_LOWER;. _5 R, e& E: V3 C  o
Clock.timerId = 1;
3 g6 t8 `2 U' x2 M, ^, D8 S2 E  K& M8 \2 u$ T9 Z6 Y
' }/ J; ^- c; _! l8 F% {* v9 I* e
/*- O' n. \( a+ ?, b' v
*  ======== Miscellaneous Configuration ========$ V1 [5 P% H2 g; }% w+ k
*/
5 k* b; ^+ ?0 U4 I$ k+ k; ]/ `2 g* U2 ~
/* set default diags mask */- Z. d# Y4 U. U0 H+ ]" M; |
var Diags = xdc.useModule('xdc.runtime.Diags');
, Z' ^5 Y/ Z3 u+ G# Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 e, X8 g6 I% }
6 }, D; t3 q& v$ M. k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 A" e' W2 i7 j( i8 zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  P6 C6 K' T; l9 `: ^/ lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 f* r, c. G$ v+ `1 V- t# `; jDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 \9 @) ]; E) S7 m4 i0 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- W/ p6 [6 m5 C* l/ z% oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! e8 y6 ~/ r& }6 [7 t; Q) sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' A( h  R* s" W2 p, A$ m( b% ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 X' h. h- q( T/ \& f! `( CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ I) n0 c6 E7 T' sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. ^8 F" t& S2 }  bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# G+ L" f% P  h  L; }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ V; F) D- j( K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( a) }& E# S. o) X* i: k6 v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' Q1 ^  T4 V! U/ K" \3 n4 g  ?4 L* w0 u$ M7 r  g. z
/* override diags mask for selected modules */9 d8 A% E5 k! e+ m' {
xdc.useModule('xdc.runtime.Main');3 \/ E5 X% g  X- ?2 M2 O
Diags.setMaskMeta(4 M, v6 O0 @5 Z+ H
    "xdc.runtime.Main",% v$ F" I8 ?; M: [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: b$ U4 `' }3 M7 u: Z" z7 H) q: s, i
    Diags.RUNTIME_ON* s2 D# c1 J; H- }
);
  o  O9 {; a( V4 ^$ V) I' W9 T! b9 K% g( R9 Z
var Registry = xdc.useModule('xdc.runtime.Registry');
3 }! m. ]/ ^; T6 Z0 cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, ^4 V% N! H/ k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ b3 ^# o2 z% H2 X" A* g8 c6 Y2 ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 h( M. a! M9 N/ z7 y' \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* W$ p) E  z6 n. Z( A, \& S7 R/ F" H  O, ]
/* create a logger instance */
- D4 C& h; q0 B- e1 B, Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( H5 S. u$ O0 T, ^; v, |
var loggerBufP = new LoggerBuf.Params();2 Y8 i# o3 ?8 t. S& q7 n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ v2 J/ g# _! G2 q! \loggerBufP.bufType = LoggerBuf.BufType_FIXED;& L6 h: Q9 \- x% p- t3 @1 S! D

2 j( Y; L* ^! I# ^1 r+ Svar appLogger = LoggerBuf.create(loggerBufP);* ]& I$ ]2 z2 x7 O( O+ I
appLogger.instance.name = "AppLog_Core1";
) N/ R: _+ g0 LDefaults.common$.logger = appLogger;
8 V! _  C  g& k  G  PMemory.defaultHeapSize = 0x8192;    ' a7 V( g, ?+ g1 O
Idle.idleFxns[0] = "&LEDStatus";. R1 w* Y* a' }1 O
Cache.initSize.l2Size = Cache.L2Size_32K;, S% @* Y' B# A$ D" W+ [% a$ _- p
3 G" I9 ^3 O9 j0 s% S/ C; T$ K& Q
回复 支持 反对

使用道具 举报

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 */
, @# v7 g2 D/ y8 G- xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 L; F' ^' r5 k# s( R$ N
var heapMemParams = new HeapMem.Params();
3 U0 H/ S8 W) u, h9 G$ I3 U' `heapMemParams.size = 0x4000;' g4 L& C7 w7 p; Q

" d& ~/ A  M- Wvar Memory = xdc.useModule('xdc.runtime.Memory');$ b  E4 S( e$ C4 B. ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 o# Q: \+ i. ^  l  q3 D  \: z5 H

7 ?( c6 ]/ X1 `* [1 W. O# m0 l. `  n我大约calloc  每次共计大小为5K*16bits,
0 S8 A9 `$ Y7 K而默认配置才0x4000、需要改大。) Q: P4 |3 @2 a/ K6 T

1 Y3 g! _; e& O/ e# p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" l  q# s$ w; ^, u0 y* I! b; L
Program.heap = 0;* [* Q" i% C, C
Program.argSize = 100;  /* minimum size */  ]# v+ Q) a3 b1 g
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-31 01:39 , Processed in 0.043284 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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