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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 g  F2 r; n4 W+ q
# t" p6 }+ q, B) l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 v$ p# H8 N$ W/ ?) [" W; t0 @
; I2 S2 ]8 S# v; g9 @其他程序段。。。。。
0 l. W* O1 z+ o, K- Y 3 S" I3 |' t) l6 _7 s, Q4 V
   free(x_d);
+ p( i# J8 k; M( [! E( d) }: C( \
1 D" Y7 W/ Z: O) i; B+ V7 V! W  R8 U使用DSP侧单独调试功能,验证动态申请没有问题,$ h& b/ n/ i1 ]/ ^. d" m
7 J  H: L# I- h* j" I8 L0 T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 D2 J0 s( T1 k7 F
4 {( F% L5 ~- c! y  U% p

# }! ^/ N, s9 O6 p# j1 g- R7 f" r' q

+ l" k+ r% L) a& r0 ]
( X+ k( u1 ?, B# c3 y& Z" C5 L. _9 K1 `
( Y, @. N! E% g
' t: r- a* V$ d' Z" e0 M
+ p) O' J; F% \# H+ ^, w! x7 w+ v

3 H* j$ J0 _- }" r8 R6 C" C
分享到:  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 */
* [3 t3 G" R! M5 E. b+ n: p- tProgram.heap = 0;& q, r, K( W8 _( n5 x4 v+ `
Program.argSize = 100;  /* minimum size */* o% t! I  ]) s& l5 v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ s$ t1 S3 R. P' m: P4 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( X2 Y4 E% M. A7 a" g/ [
var heapMemParams = new HeapMem.Params();0 B! V9 n, K) j6 N' d
heapMemParams.size = 0x4000;
! e. U* o8 M# A, }4 L* D( k5 w- Q2 R8 Z% V# o
var Memory = xdc.useModule('xdc.runtime.Memory');7 A- u$ ~, u9 s7 O" w: ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; U! `% g, G3 D. Z, T5 o& G) ?1 @# p' B7 R1 d
我大约calloc  每次共计大小为5K*16bits,2 @* c! x& O; c+ U
而默认配置才0x4000、需要改大。: h+ a' f& I: M% g* z

/ n% G2 u3 |. u1 a# [$ }
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明3 K( M2 X8 R1 I' J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 v! N8 D8 O; Q+ p, I/ F4 q9 c9 @; f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) T6 Y. G' ]7 Z9 c

% h0 }2 ]) s9 X2 E是不是需要在DSP.CFG中进行配置
2 N0 K) J. z- }我现在的配置为
1 l2 V% z; K  R$ c. G4 b7 L7 a( W" d& V- w
/*
2 r% w' \$ R# l; m/ g+ A# h( Y *  ======== Operating System Configuration ========( O+ r" Z$ ]/ W# v) q
*/  @  s2 i  [0 z6 P7 P/ r9 v
: \' u" ?# Y* y3 ~
/* no rts heap */  ]4 _, [8 ^* Z: Q  F0 A, w; Q
Program.heap = 0;+ \) F& k/ \9 X( ^4 w' A' E" I
Program.argSize = 100;  /* minimum size */
1 i' B* x: d) R! w+ _1 p7 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) h; H, u; w; O3 V: T$ ]! G5 ~6 h% J
' h7 \7 x: l" B/ l9 N9 K
/* create a default heap */) q6 e) V6 a  G9 h' ]9 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- X: r+ \5 B- u' ]% avar heapMemParams = new HeapMem.Params();
+ q. d# v. |2 g  XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 o& `+ x/ X% c- f6 v
1 a4 W$ F" u+ x9 f
var Memory = xdc.useModule('xdc.runtime.Memory');, A6 s' |! k6 d. d% p; g0 X1 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 f1 o2 q( X- Q# p3 s: U
; K& j: k/ ]' P- @" O$ O/* configure System module */3 |- |& ]/ A- ?. z
var SysMin = xdc.useModule('xdc.runtime.SysMin');# H- Q8 ]7 Z6 \4 A( C) h$ j
SysMin.bufSize = 0x1000;  d& H' U4 }  @' r1 L3 d% a& ?  Q9 k& n
SysMin.flushAtExit = false;
+ h, O6 t4 b9 x: G$ L: z  V7 f$ o* S$ h$ @# Z
var System = xdc.useModule('xdc.runtime.System');) c2 l$ C7 {6 M
System.SupportProxy = SysMin;  |0 c7 [1 D& Z6 v0 T9 w- A
; a. _$ O" }' S9 l& I/ H( Q! f
/* configure SysBios to use the lower half of Timer 1 */
; K2 W7 R) ?! m$ R( zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% M$ t- g4 k+ ^; l* pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 E# q6 F/ e" {' p$ v! f2 uTimer.timerSettings[1].master = true;
5 b' o! v7 s: V+ G8 iTimer.defaultHalf = Timer.Half_LOWER;
& D+ {9 E1 d# p8 BClock.timerId = 1;
7 ]* }5 O" F, _) S3 t- H+ F* [! x0 @* g' @

2 W" U2 Z/ i4 u1 Z! F3 [  A/*
) w# {1 Z3 i+ X  i. ?/ _ *  ======== Miscellaneous Configuration ========
& p8 G2 i* C1 C& _0 }4 s */1 B; d. D  D1 o- A2 I$ T0 u8 y7 ^6 ^

; Z: u6 L( C) @/* set default diags mask */
: Z* l  ]6 y( _& z2 zvar Diags = xdc.useModule('xdc.runtime.Diags');
0 m. }# Z' J9 h" x( [/ ^" C2 Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
# P6 b% z$ o/ W2 i( h3 P0 T$ A: D0 t" K  C
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& g0 w/ K0 ]1 I, U; i  cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 x) ^' X4 u: e9 C. Z( f8 mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 y7 o3 a( W% u+ X
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- y  l. F9 H% t) L: q4 @
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! K1 H- y) j  r& P$ ]  `7 r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 n. z4 b$ g" R( m! |0 vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. D; x* P& s0 y$ _  c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 G. Z# x% F7 W+ G3 l9 h! ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, X7 g% K) D% `1 ~! r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: w7 J& D$ y+ C( WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( v3 ?7 m( T5 w5 E+ e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, i+ s1 c" {  A1 c! k( \( XDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. ~3 f- S; r  X* U0 V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ X& R6 \1 F1 i9 O$ V0 C7 o
* P! [( Q1 z' W- d! t! Q2 u/* override diags mask for selected modules */
- V" P+ D  |* _, \xdc.useModule('xdc.runtime.Main');; q2 [, l1 O+ V! ]5 @5 g8 \% c
Diags.setMaskMeta(2 j9 y0 C0 G5 e- u, c
    "xdc.runtime.Main",
1 G2 d, X% S. w6 r' b    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 v8 ^( v/ s& P3 G$ ~. {- e, f
    Diags.RUNTIME_ON
& ~2 z4 A6 ]7 h% y( ^3 O);7 [' W  j( l, S& O! H& k% }) |
. P, i0 O6 t* v* @% q, Z
var Registry = xdc.useModule('xdc.runtime.Registry');
" c5 |& k/ @3 @# V& w8 ~! M9 \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 ^3 P& z' z; T) ]4 Q! QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' Q  g% c( o" XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;- h2 W2 Z& @6 ?/ {" F# s' A9 r8 k
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. i; E2 ?/ b2 g# ^$ ], {3 W* }" D+ ?8 K8 a3 M, A7 X
/* create a logger instance */4 s8 I1 G" B& s% |1 E! @0 A) L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# B  H: k7 x+ Y. y9 a7 ]var loggerBufP = new LoggerBuf.Params();: H  W: A3 j1 m8 @: X8 E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 ^; {' d1 I# k: n6 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 N1 G* i9 ^2 l9 ^' E9 ]' h" w; G! o" B2 d) [, c: S6 z9 B9 n1 L& O
var appLogger = LoggerBuf.create(loggerBufP);0 {3 n5 r$ h" u5 [: ]
appLogger.instance.name = "AppLog_Core1";
% Q$ w# n  t( }/ N5 lDefaults.common$.logger = appLogger;
3 a0 S, o) `# t0 b  [4 MMemory.defaultHeapSize = 0x8192;   
8 f8 X# o# e) _3 V7 ~Idle.idleFxns[0] = "&LEDStatus";9 b3 V% j) g9 S/ \2 }* o
Cache.initSize.l2Size = Cache.L2Size_32K;
9 U% a+ S6 D* Z: n* m, [' H+ a. D% p  @* ?& J* z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 15:56 , Processed in 0.042375 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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