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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ @% K6 q7 U1 Y% z( W; {4 W  H
$ Y5 H' N1 ^  c& ^" A- l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 @! M  B4 s. X4 N1 ]

+ k4 y3 y, X* W/ y7 a& U0 R其他程序段。。。。。
- I" w# X  G8 T+ ]" g' d   r- ?' k1 z, w$ b/ f
   free(x_d);" H; D. d( S" L  y+ H- s

( [0 s0 X- @; Y) @使用DSP侧单独调试功能,验证动态申请没有问题,7 e; k; \7 q7 |
! O# K9 W, e' P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 y+ D2 ]7 R% K

6 P, ~+ O6 z0 l1 v9 R7 Y% q' s: a
5 o' }) \, a6 v
( y7 n% u1 o4 n/ _, }: H% |
' [: F: c/ u6 M& R
/ Y7 t* ^+ Y# _/ l+ a1 s
4 |$ b8 j8 O- L6 O' Q$ S: B
- x! U- |8 ~# Z
; @. g; P  D) o; j$ P. u) ~
/ R0 R$ S6 R6 n7 ^6 l4 u2 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 g  Y# ?, ?9 V+ E; y* o) e/ G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; I9 l1 N9 z5 t- Q" y* B; @! F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 D3 o8 [4 {3 Q; `$ l2 C" D* ?0 ?# j

3 D* W7 I, j4 y是不是需要在DSP.CFG中进行配置
7 Z3 \! ]* r7 y+ x% p2 r我现在的配置为
( ~4 c, e( Z( d( B, K' V, [8 d8 ?3 r7 K1 O5 J5 i
/*( P7 ?- E: x- C  \! g: B
*  ======== Operating System Configuration ========+ Y$ Q& s7 B9 L9 I& L2 I, u: A
*/
1 j0 J# f; V- b0 v% |3 J0 Q' D% j/ Q) o! i
/* no rts heap */
- k; a+ i. F- H' Y0 cProgram.heap = 0;" U! P& ]5 L. w/ L9 Q6 l
Program.argSize = 100;  /* minimum size */3 U/ h" [9 E+ A1 o* r/ t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 T/ p- R, F5 x: l+ Y

# Q5 Y; e* }5 Z/* create a default heap */
; Q+ T. O: Y# T) ~; c- mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% i  Z3 H# l; ~# l9 K- D5 x3 Rvar heapMemParams = new HeapMem.Params();6 `5 L& E1 M; C  V3 L
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& U* T) M, K( t2 F" r) {; l" [+ Z( c( c% |4 b" s. G$ |1 C
var Memory = xdc.useModule('xdc.runtime.Memory');
7 u  a( O4 ]  k5 D8 Z( pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" ?3 c- J* D$ w$ a
* Y$ {# g' p7 T* U. z
/* configure System module */
3 R5 t! y7 G* F5 Z( i; gvar SysMin = xdc.useModule('xdc.runtime.SysMin');, t% V! Y" X9 m
SysMin.bufSize = 0x1000;
+ k7 A5 c- P- R: A- ~; c+ q& jSysMin.flushAtExit = false;. `/ b' |2 w( J: @. P. v5 _0 p
* a, I  j% Q6 R+ s
var System = xdc.useModule('xdc.runtime.System');" ^  @+ D, H8 A# `/ }
System.SupportProxy = SysMin;: P+ P/ J! Q; m- x6 \; u" }% [$ L6 C
/ F5 m6 @3 f  h6 L% @9 o
/* configure SysBios to use the lower half of Timer 1 */: P7 I# j' W9 V$ A
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. d" N, s! K) h* E. o4 J3 z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- K  {6 m; |" m$ |5 [/ F
Timer.timerSettings[1].master = true;% O, \" `; Q. [" Z% o
Timer.defaultHalf = Timer.Half_LOWER;7 t# r9 I. r5 D
Clock.timerId = 1;
& y% V6 f7 U6 [; }6 h$ ?0 x( O6 S  p/ D+ x

* B8 a4 M6 u  X( a: z9 z5 s% S) I/*' k# W1 l3 u' i  T3 R; h
*  ======== Miscellaneous Configuration ========% F- I. w  ?9 A4 I3 G7 U
*/3 i% D! W4 Z. N, z

3 [1 G' T, J4 |3 p- a: @1 C/* set default diags mask */, W2 d8 I1 g+ c! U- S' w/ m
var Diags = xdc.useModule('xdc.runtime.Diags');8 H! h% G! Z* y- S( B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. {: B+ ]5 R6 W/ _& g  ^( m! Y4 o  L3 l! P0 N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 \! E& l8 p1 i: w+ a4 @+ qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 `# D) e2 u, s! `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 z" q5 r6 Y% N2 m2 |- hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' R& c+ C9 ?9 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- K, e1 e. e3 G. ]+ I9 f0 Y& B
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% J+ ^) u+ \' a5 @0 KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( m+ c- D+ r( ?) pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ \# z5 D1 ~  {7 q4 z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 n+ U: o" H2 ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, k: @, k# u; i1 T) B) T0 `* I
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( U% d# Y& V. g' @2 V, n9 PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 s9 b# C9 P6 Z. H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! A2 {5 @& Z; b' o% j4 L" p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 S1 t8 ?: j) s  E3 b0 W; @9 E8 j- Y% ~1 w2 K
/* override diags mask for selected modules */
7 ?* ]% }4 B9 l# D, zxdc.useModule('xdc.runtime.Main');9 M" ?# c+ w3 G0 E
Diags.setMaskMeta(
, o) e5 `! q8 S    "xdc.runtime.Main",
$ z2 ^7 E' g7 @& A% T: r    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: C3 ^0 v# U6 ]* e6 r6 v  y    Diags.RUNTIME_ON
6 x! O' n' b" Z# |; v);
5 g! i$ n9 }7 o! u/ T8 Q
2 E0 `* I5 {( v9 Z* r$ a# U( d- J( }var Registry = xdc.useModule('xdc.runtime.Registry');5 b/ r1 `! e2 S+ a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& t! D' @6 m- y9 TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: R* v5 ?) q2 U. e: |/ u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) B' V5 I; k2 d! ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 J2 U7 X& C9 Y2 Z/ q9 }

$ H, [, B/ C% \8 t" C: U% J+ E( g) A/* create a logger instance */  F2 z) O, o5 ?$ L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 H: }  p# L& ~4 U# x
var loggerBufP = new LoggerBuf.Params();
0 w0 K7 I7 U: u- [( l% s! QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  ]  |" f6 L- p9 I5 W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# ?+ D6 j8 r( `1 V3 N; C( {3 U5 M- V1 b
var appLogger = LoggerBuf.create(loggerBufP);
$ w' |7 g  b/ }9 d9 ]2 Q  h# gappLogger.instance.name = "AppLog_Core1";, @  g' J4 V7 Y! K# U2 G
Defaults.common$.logger = appLogger;
+ G  e, t: s( F& fMemory.defaultHeapSize = 0x8192;      J9 g1 E# I8 x
Idle.idleFxns[0] = "&LEDStatus";
/ G, u" F. K7 W+ ?! c9 ^/ `Cache.initSize.l2Size = Cache.L2Size_32K;
" e+ T: }( h8 ]4 s) Q0 \
6 z! a& |8 q' d  w
回复 支持 反对

使用道具 举报

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 */
- K/ h0 X6 r; U/ }! C' p, l# e+ Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, R* J6 y* P) M' p: K
var heapMemParams = new HeapMem.Params();
9 I+ Z( _! G8 P/ B5 hheapMemParams.size = 0x4000;
* w, K0 v1 t' D' @" @$ k4 \' J+ s8 K2 S$ z" Q  T0 S3 E" X
var Memory = xdc.useModule('xdc.runtime.Memory');
# I; I* J4 I8 b% OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% N3 t+ h; a3 s0 I% m  M
; N( {3 w5 g9 C. l5 R0 @; b
我大约calloc  每次共计大小为5K*16bits,
# e) `4 Y6 K- r5 ~而默认配置才0x4000、需要改大。" Y# ~8 k! X/ @+ T

1 [( Z( @$ t, D* C8 c: I1 O* [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 F2 A- ?5 l' _0 O
Program.heap = 0;; ^0 X1 P4 g  w8 U7 D5 z
Program.argSize = 100;  /* minimum size *// i! d! Y+ e( j2 T: x# E
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 07:19 , Processed in 0.040486 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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