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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: C# v$ b6 c; Y0 ]# y* |1 M$ O3 K
- Q, q. K* F% }) ~$ g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: m7 j: q: R$ \5 W- g

' m# j& M" g$ a' |4 A8 f其他程序段。。。。。
! |" q( G8 b3 T. A
& u  f$ O$ Z' T   free(x_d);" N" }% G+ ^- x# b: P
% J9 h  n. g1 N. P+ Z0 O5 g( t
使用DSP侧单独调试功能,验证动态申请没有问题,
7 ^: J' T; I3 u3 `! |, m; \! n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. i1 p' V1 ~# k& g3 O
. j* m8 Y& b0 Z  O
" e/ z) }  i& C( R

' r: w0 ~3 r3 I/ m1 t& z5 R/ ?5 _7 G3 h2 i$ q; P/ G5 L

0 Z6 N& N$ x8 ^5 n5 \6 ?3 y$ e) s. c" }7 X
% k* h% s+ l/ ]7 [

" ]3 }+ B7 L3 C& D  i
% \5 u% n. |' C- o) J2 _7 i" y, g. a% P3 ~5 [" w7 U1 w
分享到:  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 */
% y8 c, v; x. r7 Z1 o2 v9 m, N8 IProgram.heap = 0;. M; ?# ]  K9 D4 o/ W, K7 H) S
Program.argSize = 100;  /* minimum size */
- a1 c% r; \8 S9 q- vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 D) G- Q7 I$ v; Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- T+ m* _/ B% W. e* {  p. |var heapMemParams = new HeapMem.Params();
+ a" _. W" ?% E: }8 YheapMemParams.size = 0x4000;  C7 [9 a2 A; g, j* I/ W, _

) X; Z; W$ ^0 ~4 xvar Memory = xdc.useModule('xdc.runtime.Memory');
0 a! R" x  D) g. l% n! \6 kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 h4 P) K3 d6 Z/ j
* \7 `! ]" A: Q% R5 V' h. V% ]我大约calloc  每次共计大小为5K*16bits,5 l0 ?9 P4 p& Q5 }7 F
而默认配置才0x4000、需要改大。
) e) o* _: q, Q7 ?1 w1 O
" i+ G' b4 }: G* p. o
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
& W& k! o$ O! @2 l3 x2 N# ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# @5 c0 g0 L9 g+ r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& y0 c/ ?/ B7 `% ~% T! [

  q$ L. ^" H$ j* E# N. \是不是需要在DSP.CFG中进行配置
8 T, L' a$ }3 I& w' k; [我现在的配置为
  m1 ^/ _6 U$ }( J
# j: q  c7 `2 I. W/*
  Q  p( j* ?  i *  ======== Operating System Configuration ========" }: b' s. S% J
*/; {4 E2 S* P( V& j. [
- [  t' f5 V& P
/* no rts heap */& _; S/ G; g% h
Program.heap = 0;  I4 e# i2 }6 R8 R
Program.argSize = 100;  /* minimum size */
' \$ b* e$ I/ m2 I  BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% K2 N  B) K: [5 P5 _
% X4 P6 D$ A) F' O1 p4 o  _- i
/* create a default heap */# G) M: W7 j" C  |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! d0 j/ L0 y& @
var heapMemParams = new HeapMem.Params();% E) C; G% w  F: m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 S; a9 y. ~0 C* T7 a
3 G) @: V0 L- Q; V
var Memory = xdc.useModule('xdc.runtime.Memory');7 p# Z5 A  |" y' j. Q5 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 y# z: E, |# j" p- ]( z8 {: c, y0 F3 j" y, t
/* configure System module */' ]# y8 y2 k) c( n& Q( u. a9 I4 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');
- ?6 i8 N0 o" p3 ZSysMin.bufSize = 0x1000;6 o* k3 k5 K7 C
SysMin.flushAtExit = false;6 W/ y( z( r3 \8 X; r5 q" l

; M5 t9 w" L+ u; i" Y/ @" j  d* o  _var System = xdc.useModule('xdc.runtime.System');6 d/ y1 n" b9 V
System.SupportProxy = SysMin;& t. B5 t6 ?: X) G' G5 V

/ d! x4 o2 F9 b. C) i/ K/* configure SysBios to use the lower half of Timer 1 */: l' r$ X+ z! r9 u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 @- F( L' @9 Z" J( Z: l+ Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');) l* G9 @) l! \- K
Timer.timerSettings[1].master = true;, M; D! t0 `9 K6 ~
Timer.defaultHalf = Timer.Half_LOWER;
' P& u5 S; \+ tClock.timerId = 1;$ k& q; k1 l. Q) B  f2 c9 V
( P: @$ D. n! s! R
- j5 [( O) M! i* Y
/*
7 }9 S$ [- v; l4 X *  ======== Miscellaneous Configuration ========
/ E9 ^' q# f0 [3 f( ^1 A' q! m8 n1 H */: Q2 x; I  m! W

' p( A& t9 k+ i! d+ n+ R/* set default diags mask */9 g' U+ Q8 T) W- K( ]
var Diags = xdc.useModule('xdc.runtime.Diags');8 B% ~1 U1 O& ^6 I3 K) E* B1 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');) N; X& h1 n. X9 D) P: q
1 f; @$ o" M( `5 V' F1 e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 {: I) C7 R6 a+ t0 U& Q6 ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  f0 ~; H/ v2 D  l4 ?Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; s6 I" x  n2 r& V- z3 u4 x: XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 j/ @/ \7 r3 o4 E/ E8 U+ W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" G; ], N3 {: b( A6 \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# [7 m- _2 b( R" wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, N$ r7 y0 m7 ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 S, h/ Z% ]: d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 S+ C" ~3 r) `9 `3 q2 i0 J# Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ U4 Q5 N9 W. H, oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, |7 b" P1 G+ A$ F% E$ N5 pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 I8 M" t: }8 h2 X2 ^4 a% ~- A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 R; r' M4 }; }) S5 sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% |" B; G% i: _) c, t
( A& }/ m: O2 w; D0 }/* override diags mask for selected modules */# e$ z. K; o! y; @5 g/ ?% P
xdc.useModule('xdc.runtime.Main');
2 U* e! F- D! u; s+ L+ NDiags.setMaskMeta(
) Y! a5 C; s" i/ G! p    "xdc.runtime.Main",  |3 q* @( h# r) |  S" M! n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: \! p& p6 y' W* I" O    Diags.RUNTIME_ON
5 O+ j+ A: ?. `);, N( X( C5 m/ ]

5 ]( d+ X% q" lvar Registry = xdc.useModule('xdc.runtime.Registry');
0 W3 V. o2 t8 N1 l5 n7 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 d" b2 W7 ~. l) s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; J( Y$ f' x  O& D! U% |7 Z/ m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ Z7 I& J: [, t6 [( v) R- S  h
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ Y  W3 P! A* J$ T* ^. K2 q+ v) I% N; p
# Z" H9 |" u# [5 f) T, @5 P
/* create a logger instance */
- h) s. F( X! Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 s0 O: P0 V9 v. E+ r- Q8 x1 [! Uvar loggerBufP = new LoggerBuf.Params();/ J) K4 ~9 u6 e+ ~& X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 n( {* B, a; Q! C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) r3 X; E2 J2 K; u  z
6 u* I2 o5 p' q. v: t) \, }
var appLogger = LoggerBuf.create(loggerBufP);
( p6 U7 W6 V! }, E$ P; |  TappLogger.instance.name = "AppLog_Core1";- @1 b# U1 W2 I5 v: b; `
Defaults.common$.logger = appLogger;/ D: \7 c4 _$ d& ^6 Z6 A+ \1 @
Memory.defaultHeapSize = 0x8192;   
8 _0 V( z8 Y$ P$ z( Q& ?Idle.idleFxns[0] = "&LEDStatus";5 e1 Z2 s/ ^& a, [( p
Cache.initSize.l2Size = Cache.L2Size_32K;3 w0 j" a0 ]( l$ p
& _: f4 l% c3 N! u. A: U. J& W
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 15:06 , Processed in 0.052931 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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