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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

! B4 q0 E" ~! Z* r    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' X; ~) c! s4 ]6 G: s# g$ j
+ W* x- g3 n( q& n2 C  }
其他程序段。。。。。( M5 T( W. p8 K, i8 W
8 c8 `0 z; l; T1 X# i
   free(x_d);7 S; }' f2 O8 w' V
6 b. c6 }3 ]. |0 K6 a5 S
使用DSP侧单独调试功能,验证动态申请没有问题,  S6 v1 i4 w/ ^0 d8 ^: G0 I0 o
% s, I/ w, E$ o2 F+ y% ]
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, T& u0 _% I5 @6 E8 F1 s% s

0 I0 k7 a, z& e2 v7 m
% I: `0 J7 d' M& y' v- B2 p! F8 G5 @* G. s

6 I. N# F; w/ T% G4 h( g
$ e9 j+ ~3 w2 }  e
5 g9 o4 m1 \4 j- }( N' Z4 o* |. U$ m; q6 T+ U9 e
6 o- g4 N9 ?  K1 P3 {6 s! m
& Y3 _. [- I% J. `

8 o4 @8 n+ e" Q! y- n7 ~  f: B, D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 Z& m5 Q, U) M# YProgram.heap = 0;
: y5 l2 i, h. \  N9 fProgram.argSize = 100;  /* minimum size */7 x1 b+ K3 ]) P, f9 |: d7 D2 z, [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# J9 A9 l1 ?9 _% {: i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: b, }# \0 \' avar heapMemParams = new HeapMem.Params();( }; ]" {" b9 r& U  |  r
heapMemParams.size = 0x4000;" j; L" E3 J* p' d# m& l! N
  E' z: U7 H' I# d
var Memory = xdc.useModule('xdc.runtime.Memory');
# j" n+ J! I' l; _3 f+ }+ a/ J: tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, i& `) {3 `0 b/ T/ a# A

$ L% N2 X' S/ e0 U- u# X2 {我大约calloc  每次共计大小为5K*16bits," G7 I3 D% k9 h: Z3 L
而默认配置才0x4000、需要改大。2 u7 S. Z% K3 ?: W6 C

* P) F, p; ^! j7 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& L1 B0 l8 d6 M1 E" r: Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 C$ s- O) F3 |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ ?# N9 C8 r; A$ r6 ~: T9 Z

! \& M8 i) ^, w% f) I是不是需要在DSP.CFG中进行配置4 i) a5 F1 `- z4 J% j2 D
我现在的配置为
: r/ O* t& P1 q" T  L, a; P% y# U2 F  h6 J5 [; e+ z7 \1 P
/*( g6 W0 _; M/ ?: E
*  ======== Operating System Configuration ========
0 n# c# \/ s" {) | */
; ~- o  z8 Z( K8 L. E1 ~
1 ^. m4 \! p8 h* F/* no rts heap */% J, u# E/ u) _1 Q; C# l9 ~2 c
Program.heap = 0;2 V; F) N( ?1 `9 E6 O
Program.argSize = 100;  /* minimum size */2 g. j  |# l' ?* `! L& F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# m' ]5 f* r9 z, ~1 G
! y8 _; v3 B5 ^4 E9 v
/* create a default heap */
5 z2 `9 I# j" x* v$ h) m6 T! g5 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ h7 f" x. _* R1 W
var heapMemParams = new HeapMem.Params();
. Z7 q( R% t, K9 R2 XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 s+ _8 m0 t5 G3 F' A

( W/ C! _; l9 N" n1 D
var Memory = xdc.useModule('xdc.runtime.Memory');
; b2 r3 D. x, T  e  @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 D9 |  r. S$ W  K
7 F1 h4 W' k, D/ \# V5 s' y, p
/* configure System module */& c+ z2 K" L: E7 v; U, D: C
var SysMin = xdc.useModule('xdc.runtime.SysMin');! h! v$ s, j% A  N
SysMin.bufSize = 0x1000;
% q& T+ _6 x  @9 P+ r/ c* t8 ]SysMin.flushAtExit = false;
7 b; N" k% o" Y/ p- W' Q9 U% p: ]( }+ i+ }2 X; Q: m" p
var System = xdc.useModule('xdc.runtime.System');3 K3 ]* L/ r3 B: u  F
System.SupportProxy = SysMin;. o' D; F' L9 K4 Z" `! X

5 z: Z4 M9 \$ w% H; s/* configure SysBios to use the lower half of Timer 1 */
9 \( `8 B% h# B3 v* Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( C: N# b8 S3 h) Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ p$ A) ]7 _! ?8 y$ y3 O! D" H
Timer.timerSettings[1].master = true;5 A9 c/ `& I$ i
Timer.defaultHalf = Timer.Half_LOWER;' t* z: r7 t) r1 l2 v
Clock.timerId = 1;/ I. u7 j* Z) S* o. N" @& o) a: n

% m6 \# F7 B0 _$ W5 h8 M4 L8 v8 V5 v+ y1 N/ }% l9 E* w/ X
/*& g, [; p' o* ?2 L' ]/ Z
*  ======== Miscellaneous Configuration ========; t+ u0 d3 g# |4 ]5 A3 N
*/
  T+ d. s+ d) F
1 J- x& Q. ^2 n% P# N8 Z/* set default diags mask */- l9 O  x. f5 _- w" M. l" n% f
var Diags = xdc.useModule('xdc.runtime.Diags');$ Y6 U/ ?1 ]) }8 r0 Y' r0 r
var Defaults = xdc.useModule('xdc.runtime.Defaults');; w; a+ a8 _8 ^* x
) a8 E: @& ]( l1 ?1 y9 X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 t+ K# g! j" ]: ~2 b: u( ?4 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! [" ^* y5 X- U# v; V/ O- v' ?: QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ M4 W, J! V! Z$ y2 Q8 [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; I- G3 {5 x% \& `, c/ h! Q# w5 qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. J  R5 T4 N, \8 }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 q" p/ Z4 q9 n, l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" B9 i! n: z8 u. d; H. gDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 U% P* T% K+ f; C7 ?6 x# n! N
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) T. q3 H. b! C+ p8 FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# x" {. `5 W( g. _9 E( I9 CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# T. I1 e" v3 u+ [4 ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 l" E% ~' t6 M8 R, q, q# y8 k( nDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 x, f, q0 d$ J9 }7 \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 r6 g: m$ \9 C5 N% p" m6 A

. |- x; p3 y; _/* override diags mask for selected modules */
/ F$ @, W& j2 A0 ]6 _xdc.useModule('xdc.runtime.Main');; }. K; C8 [" X; k- P6 q
Diags.setMaskMeta(
6 L  I( u5 m9 o3 u$ }2 ~; E4 T! k# o    "xdc.runtime.Main",
. f" B0 B& ~; _* [  t    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 B9 h+ M0 v  U
    Diags.RUNTIME_ON: p4 [' o4 I2 C4 w7 a* z2 z
);
% T  Q5 z5 h8 [# M& U
  n: M5 v8 y% l- t; Evar Registry = xdc.useModule('xdc.runtime.Registry');) [0 r) X& n' d5 v3 I; }+ \' P2 I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! h( o/ y% ]$ K- R9 f5 z- dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. U2 Z- y. Y- u+ _2 h. _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 ~, i9 k$ C: B: y) }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ X9 F* q, i( W  r1 M

9 s& z8 W# U9 o- h/* create a logger instance */
) E+ W; K# o. b& }0 O; Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# P) E$ L9 k" g0 H+ gvar loggerBufP = new LoggerBuf.Params();' l$ ~& X: w; R9 s+ M1 R6 v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( b/ C. n( w" f* I3 D+ k! P" g1 y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% V7 w- e! S# v  _) q% x2 b

' w9 u. b; L5 f$ V; M( Nvar appLogger = LoggerBuf.create(loggerBufP);! f  b' H2 T! r# a! [7 n* s- B
appLogger.instance.name = "AppLog_Core1";/ v: u2 A2 f- r8 _
Defaults.common$.logger = appLogger;
/ P/ K% l* v  j9 @7 KMemory.defaultHeapSize = 0x8192;    9 W6 \: E. k# Y: O, G
Idle.idleFxns[0] = "&LEDStatus";
5 `3 I" X  N+ D6 D4 E/ A2 v9 }" uCache.initSize.l2Size = Cache.L2Size_32K;
5 ?. X( k7 ^  {& `, H' u, K, p
8 S: s  t! g) a- }# o- M) r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 14:33 , Processed in 0.040619 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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