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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  ~+ C" I6 v; c; U2 i( j% m1 n- _% G( q2 l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 D- \# K& |$ b. c7 D2 B; k) G9 i

8 _( Y, p! k5 v8 Q9 c其他程序段。。。。。
* \  o! h8 D. \2 G
+ h+ x  ]# H  ~, K% _   free(x_d);
* l, G' C; M; F# \, f& R( |  }! H4 `2 c& V9 k, }5 B/ F
使用DSP侧单独调试功能,验证动态申请没有问题,
6 B5 u& n0 m% y% U+ C. y) E
  ~+ q! I( ~4 D0 W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 l0 w) D5 Q9 u% _! s- \

+ n6 D/ F# ?/ e1 @, i: z
: _0 \$ _! D7 M0 U( b
/ E9 }  f1 e0 P7 }$ Y2 g' z; _* ~6 Y. H% z) @& \: T1 u: X
2 m9 T- ~. m% F, [2 D; h( }
% p7 ^) [  `- b3 ~" X
/ Q4 q9 L, [. X1 G! V* ~
+ [5 l. D* ]) h) B6 u) V5 q
) g1 F9 E8 @$ `

: A4 S6 Q0 A+ n6 ~+ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' f5 I  g% A: N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 _3 C, d, j0 K0 z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 Z5 A% Q' @3 n$ y2 e$ \# j5 r! @

: x% m' t) N# `& z* ]) G是不是需要在DSP.CFG中进行配置3 x0 P' F4 h2 D% e  v
我现在的配置为
5 \+ p9 u# C, {' F, f7 Y7 z  ?3 E2 c1 F* M) J
/*8 l" [+ Z* J) R6 l1 ^3 Z
*  ======== Operating System Configuration ========
% Z3 f# _5 `' L3 W1 v+ O; e; r */& Y2 ]; m8 x" h) m

1 N6 P" {% K1 w/* no rts heap */4 f0 O1 `1 y( \# V
Program.heap = 0;
9 ?+ l- {  e  {$ d: W" `Program.argSize = 100;  /* minimum size */! U) d4 X# @; O4 S# e- t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( s! C* |" y, w4 N$ o& z/ H# l2 Y1 G+ B! c
/* create a default heap */* v. {2 q$ a0 I# s. s9 k* T  X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 n$ T; w0 G( ]4 S2 uvar heapMemParams = new HeapMem.Params();
& a/ e* K/ w) \6 mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 ]) Z. g5 o2 z$ r! u
' o! ]+ f: G% b9 Q' a" Y& F
var Memory = xdc.useModule('xdc.runtime.Memory');2 c  u8 R) w, j# N  A  j& e! k: E+ C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, D% O* c& l, A5 _
+ Q7 `+ [" I$ N6 z) r3 q1 a" I; |/* configure System module */
( V! z) @, `# \+ Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');  T* d: e! J9 b, H* V
SysMin.bufSize = 0x1000;2 q1 g: {4 I( L$ U
SysMin.flushAtExit = false;
/ w: k9 m6 Y8 {/ A6 k& D! P+ S- e% i! l' x$ K  _. K" E
var System = xdc.useModule('xdc.runtime.System');
! v% c2 W6 m1 C1 |1 i% oSystem.SupportProxy = SysMin;
% S2 |  [5 M$ N* n; X4 Z; f" V6 f" C) x: W" J' ]
/* configure SysBios to use the lower half of Timer 1 */$ b6 {4 Y' @3 h7 T; }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# o' _# r1 y7 z3 _* W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 h" K# R5 W( m& L  b/ O6 Z0 y
Timer.timerSettings[1].master = true;
* l7 L3 R' |! @7 ?Timer.defaultHalf = Timer.Half_LOWER;
$ @4 Z* p2 n7 u4 [Clock.timerId = 1;4 v* O4 f" ^8 k. }

& Z: v; V) g1 Y8 `' D
. E( P3 P1 }% Z# N; @5 L8 t9 V/*' c% |# Y# U' f8 A% H/ Z& g
*  ======== Miscellaneous Configuration ========
  S, D- @" e: x6 d3 \4 `8 R */
. `9 \4 S$ ~  [- v# P/ c+ a, V8 J) p0 C5 u$ v) f: ^
/* set default diags mask */- e9 y- T" L" Y6 S# {9 `* F; X! s7 A
var Diags = xdc.useModule('xdc.runtime.Diags');7 ~& p2 e8 [, I
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 E* u, V; `+ A' l8 Q" P
8 w' A1 J5 v; m5 S' aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 U6 Z" j# G; c1 `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 P1 A& I1 @4 R# w/ v7 }! [* V7 l. iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 [: h! {  U1 p% v. v' D8 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# A! C6 V% F& ]# b# XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 a% R8 Z+ `; j# h3 ]% r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ M; _* Z0 E7 W; Q+ H# FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( C  ]& y* q& C! x* p1 `$ ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& J8 @- j) M: x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 R" Z: _; X$ w* F0 r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 B$ b+ A# G* A4 Z2 a; g  n' y0 P4 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ j+ N0 N: q1 C# w! X1 D& T7 H+ f; {9 @Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 i$ b% r6 n! G' iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* g7 Q" ~$ z) N% oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* N% x1 U' p+ P5 @3 f' Q7 r+ K' H
7 z2 b* Y- e" J/ O5 m0 d& @
/* override diags mask for selected modules */
4 @: a7 J; |. lxdc.useModule('xdc.runtime.Main');
: k8 y4 k0 K7 Y7 G" dDiags.setMaskMeta($ n+ R# u; i# e7 C. V: L, x% r
    "xdc.runtime.Main",
+ c6 T# l6 C8 [    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ A& ?# R: q% Q) f7 O- J
    Diags.RUNTIME_ON
, m( x5 X1 V0 F; x);4 I/ b3 H9 Y- ]' X+ k) ]
6 R7 r8 g! x3 Y5 X
var Registry = xdc.useModule('xdc.runtime.Registry');
4 m$ U; b# a1 f  f( i4 x' gRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* [$ m- _: D, x, X8 V1 V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* r+ z5 ]# H) r6 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) D% l* M) ~8 B) hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, ~( d9 `1 N( b$ _4 r3 [% E9 E
* F$ }( k9 k  w# e7 g% g/* create a logger instance */5 t3 z/ y- |# ]' D1 N$ M5 E- P
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ r$ r1 n  v- ]* J6 o- A( {9 [var loggerBufP = new LoggerBuf.Params();
3 O( |6 v# H2 `" ?# m: n, A$ xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; N& o: ]# v2 Y+ a/ B, a8 qloggerBufP.bufType = LoggerBuf.BufType_FIXED;# _6 H- y# A) B: I* a* F2 W
- Q  q2 V8 T9 j
var appLogger = LoggerBuf.create(loggerBufP);0 i% D- z/ m) \+ V) r9 W% b
appLogger.instance.name = "AppLog_Core1";
5 u% l* J  {5 @6 I* M: F) K; uDefaults.common$.logger = appLogger;
8 N; N9 D; G- eMemory.defaultHeapSize = 0x8192;   
8 D; p- X2 [7 J/ ^6 mIdle.idleFxns[0] = "&LEDStatus";
; {/ P5 r3 O, ^8 }Cache.initSize.l2Size = Cache.L2Size_32K;
% }) l' D. [" o- l+ A; F$ R9 S  [& l; d: Y
回复 支持 反对

使用道具 举报

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 */* A& j, |8 f* e0 A4 x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 x$ O, |+ C: w# N4 ivar heapMemParams = new HeapMem.Params();
' A. m" j' m1 \& vheapMemParams.size = 0x4000;% Q3 m% e( ?3 b0 p

" c. ?: w6 b5 S  z% ~var Memory = xdc.useModule('xdc.runtime.Memory');/ c' P& F% o) U, Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- J) B9 g& n% g& _( }
4 P- Y* ^* n, u* m我大约calloc  每次共计大小为5K*16bits,  k: c) E# f. g; I3 N! C  z
而默认配置才0x4000、需要改大。0 O0 E, J7 R  _! h" e) O& J

2 I3 J! ]. }6 C" n6 _( B2 }/ ~- Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 G* m% C& `" j$ r9 [
Program.heap = 0;0 G2 o9 Z' F+ l
Program.argSize = 100;  /* minimum size */
: F2 [' D' H) V9 c4 ~Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 21:18 , Processed in 0.039551 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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