关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 w. ]/ G, Y& v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- i6 d) _: k0 Q" T' a$ V0 i. ^8 Z5 Y* M
9 ^7 I$ [# e1 l' F7 ^0 N其他程序段。。。。。
' v9 v' `8 a8 B: P9 o2 C' m% A 1 ]2 J1 Y  X  K+ I
   free(x_d);
6 b$ l5 E& ]6 `( Q" W. p3 Z, o
; ^! d" _7 s  U1 y使用DSP侧单独调试功能,验证动态申请没有问题,
0 g+ C+ d; @8 ^+ B; z) A8 z2 [; r* n9 b8 T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" u# @2 ?+ R8 M, P' ^: L

' N9 l" d4 R- J- [
- @" M, J; `$ z& B( ^
: S& g; I3 d8 f+ c) T+ R4 y
3 h' d- ?, j  E+ `1 s8 V1 ~# N* S1 X, q3 _6 V7 v

. V9 K4 z) H+ d+ W5 f
$ O% U0 U0 E' o2 V
. m; r9 p0 l( g1 T- q
, z8 f0 i; z4 r6 n- Z. A& L% L4 r6 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" q8 R5 ~! U& v& {) t: ^- q7 U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% C. o- ~2 \5 q8 R, n# s0 R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ @8 T  O6 Q. p' T

8 n; v: f) q% J% X) U4 U3 e, A是不是需要在DSP.CFG中进行配置
9 K' z& w, d) k我现在的配置为: `3 g" }! Y" H7 E1 c1 Q

" X6 W: [- x$ J8 F; J+ [/*
# W- J$ q+ u6 [; o! @4 V *  ======== Operating System Configuration ========
  z9 k) Z$ ?7 r, x */
" |) h6 j- \: r1 L: ^
+ A' r% x4 f7 T, Z/ z! j/* no rts heap */
2 _2 g5 `  E: j+ L: ^; LProgram.heap = 0;
1 O2 [' x. ?* D( l1 k& N. e( t% u$ RProgram.argSize = 100;  /* minimum size */
1 x" B: J# X/ MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 Y: H( G5 o$ [2 ~( Q9 f

, L8 }; n# y3 l# d+ a/* create a default heap */6 v: t. g+ Z$ ~- r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# M9 i4 F  Z: W$ ?5 }
var heapMemParams = new HeapMem.Params();2 ?$ q3 I0 a. b" B+ ?" E  P0 n( S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ {4 q. \& H/ d9 l" t6 [! U1 d
/ N  x. }* X; K' J7 x8 z
var Memory = xdc.useModule('xdc.runtime.Memory');
! q9 g, G- n% R% f1 s0 M+ T% kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' e$ q$ i3 v1 z
0 v7 q% W  H/ d# W. Q' G. i
/* configure System module */
" G- G! T' k: w3 @* Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ w* I! F% Y% A3 H
SysMin.bufSize = 0x1000;" d0 |2 j/ B$ K5 o
SysMin.flushAtExit = false;
$ w1 u; w& P) P2 I% r3 ?4 g+ A( f  Q; P! P. g0 H
var System = xdc.useModule('xdc.runtime.System');
! ?1 w7 w5 {4 B/ _$ j, G  iSystem.SupportProxy = SysMin;! z4 e' Q+ b8 D$ b" w9 A5 W/ U& v
. J# [6 f# p9 f6 S" S
/* configure SysBios to use the lower half of Timer 1 */
9 G9 f$ R1 q7 pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 u1 W3 |3 C" t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) ~9 C# P) t  \, y
Timer.timerSettings[1].master = true;" `  `9 w% n8 o( i* c
Timer.defaultHalf = Timer.Half_LOWER;  e' G; S; o: T/ M+ _
Clock.timerId = 1;5 }8 W  S8 |; ^

# j% R" _0 j7 A( }& |
. H5 ?7 V- G/ e3 |4 Z( y/*
8 D4 d! \$ z6 h, @' d7 E1 u  t *  ======== Miscellaneous Configuration ========1 q1 h1 L& q7 v/ P
*/; g) L9 Z' {: k/ m: \+ U

. o+ t# d2 g7 g8 {/* set default diags mask */
1 [0 r! K9 N# J7 B3 j" uvar Diags = xdc.useModule('xdc.runtime.Diags');
0 h) @3 Q0 [: p4 `" P  _7 |+ V1 Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 _7 `+ W3 U; {  b# {

; ^, _" t5 O6 L# ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& s( j5 V4 R5 }. Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 |0 X  j) Q* E! F* k$ Z$ N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 `+ Q0 g9 T; Y& k) v2 }, cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 U" ?# m' T/ ]2 d* N- a; p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% b# B9 B5 u0 h% S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 ~/ h4 ~0 \, ]8 _. K
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# j( l( e4 n3 y9 G4 N1 aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; ]$ r( u3 Z) {Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 ~6 I+ m7 P$ }; j. S9 ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* V4 W# ]- l4 y# J0 ]  X2 \; n8 ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* z0 u: V4 D$ _: ?# gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 l6 ]; J' W3 ~! x- a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ G, S/ L3 g7 [: A5 `1 aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 \0 A- i0 T1 I
, I/ E- ~( C8 V; S9 i; h
/* override diags mask for selected modules */' L% s9 q* c" Y) Z* g; n3 }& o0 ^6 R  s
xdc.useModule('xdc.runtime.Main');0 u% x( `( F/ C% [) I
Diags.setMaskMeta(6 W0 `: @* h- S! l- K9 u
    "xdc.runtime.Main",$ o+ r' h$ ?: ]0 t! A: o5 h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- ~! e; D& u8 {# k2 v    Diags.RUNTIME_ON% E% x& P' _, n4 B9 O& X  \
);/ ]" r) I( N: e" }& X
- `" Y( X& n& x4 I3 m! y( U5 x3 F
var Registry = xdc.useModule('xdc.runtime.Registry');( V9 f$ [) I6 t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 X& M4 F; X+ i! C0 Q  ?Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ k: T2 X4 P4 k, ^$ U" R5 e  U+ pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 s% e; o6 e. k7 f% w, o2 C8 j$ `6 w& M# URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: ?/ e% U0 Q  [# D% g" B. K

& D- y( W2 I" |& b/* create a logger instance */
* k/ o% s/ A3 C! C7 Z; Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. r! ~5 n; k4 w/ t- f) @& j
var loggerBufP = new LoggerBuf.Params();7 S0 r: I; Q( A1 {% R: T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' o, q8 ~4 L7 O4 K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( |  f7 z8 X4 v$ [, M
: d: q* O" q, W* r' d$ e
var appLogger = LoggerBuf.create(loggerBufP);  ?  n+ `1 U# U" ]/ w
appLogger.instance.name = "AppLog_Core1";3 ]1 }4 Z9 M$ q# e# j
Defaults.common$.logger = appLogger;
% R4 Z* p: P' Y" z+ y, x: }! dMemory.defaultHeapSize = 0x8192;   
' g5 l; H) x- x! b! wIdle.idleFxns[0] = "&LEDStatus";
  X: d: L% I2 N, k8 p& wCache.initSize.l2Size = Cache.L2Size_32K;% t/ v  O* R, T2 y( Y' L$ I* C" \
5 A8 l* P" W) D7 ?# |6 K: @0 Q" 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 */3 r; f7 b8 ]: y( T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  n; D1 `# N. _- l
var heapMemParams = new HeapMem.Params();
/ s0 ^3 M2 g! b8 W$ ]- j# ]heapMemParams.size = 0x4000;+ N: V! `, T% v. b, u- S8 k3 N

6 ~. i, Z! M, c5 C0 X/ A' ^/ ]+ Rvar Memory = xdc.useModule('xdc.runtime.Memory');+ Y$ e4 J% g  x, B: ?: V3 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ w8 t7 O8 F' D$ [0 P: h
/ r) C) x* o. H0 H5 O9 K7 ~
我大约calloc  每次共计大小为5K*16bits,, F; X2 M; v5 K! \
而默认配置才0x4000、需要改大。( R5 i# I9 Z+ G- j; x
2 g  U$ ~! V/ G0 }9 M# U/ l3 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 g3 n2 Z# l! a  @2 A4 I. t. M9 CProgram.heap = 0;
0 l. U' \2 |7 E" }/ z$ I8 cProgram.argSize = 100;  /* minimum size */- ]5 X- S; R8 C$ @7 b7 {) n
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 13:17 , Processed in 0.041666 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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