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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 ^% C1 v0 p' Q% ?
" Z0 g2 s; s. Y" Z/ G, j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( y' `/ l% ~+ Y6 i7 P, N

, b/ C9 e6 y/ ]其他程序段。。。。。. ^' {* `9 }8 a& C1 D9 m! e2 Q; W

' A# \; @8 Q, p  n; Y) ?   free(x_d);
& L1 l. g. @! o. F
' ~, ]& G5 V3 ^& b4 Y& E! \使用DSP侧单独调试功能,验证动态申请没有问题,
) s+ e. H3 a" s
; k0 e) I4 m; {/ m7 T1 K# Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! U$ I( |" L# v  `0 E: l

0 f3 I  F* M+ b1 i% N% A) c& P: D' [& N" Z# ^! V. D  H+ l
! Z) i% r+ F4 E! o! H
* }" d! |/ d' W# x; @' `) k
; Z6 h, z* I5 T
0 l$ x5 H. p% Y1 q' p

2 X- u7 _; |( r, n( _: P. B$ K$ A9 P2 @( U' R2 x

% e9 t3 V7 g) H* i2 {: f
0 B7 I3 ~9 X& V3 u6 ]) l0 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 X$ Z9 n$ W& f0 T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 ]' M0 w) S4 k- F+ ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- o& K$ q9 z% g8 w
$ Q- e7 k& V. F! s& D
是不是需要在DSP.CFG中进行配置: \1 a3 q( M2 f# s; A+ U
我现在的配置为& ?: o$ C! }' l

0 P9 |2 T4 j3 s" K/*
9 V6 P  r8 p4 m* S *  ======== Operating System Configuration ========
) R+ g9 B+ Z, ^3 I9 D */
  y3 Q9 u  v0 g7 k* [, W/ |
3 z7 a0 `$ R3 n4 e/ o/* no rts heap */7 m4 L3 Q* u1 @6 I
Program.heap = 0;" P; M; z4 |% L: K
Program.argSize = 100;  /* minimum size */5 N4 J0 k; ~" ?* F3 O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 |+ t4 _9 H, o: ^0 A: E. A; I1 B- O  T4 s9 D) t' V+ {4 ^' {
/* create a default heap */
" l$ ?* p9 q" l' S" nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; _  a; l( g" |5 \
var heapMemParams = new HeapMem.Params();9 a! G" `1 M6 u! n& g, ]1 c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 o0 e* l3 H+ g6 m) d

$ \% U% N& M# M. b% {( A) D( c
var Memory = xdc.useModule('xdc.runtime.Memory');
& V: U! r; o! Q  LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: A8 e; t. C% Z% s' a1 \
2 O% g3 C. H8 A- |/* configure System module */& D1 q7 |! Q! Z/ Z: O- s
var SysMin = xdc.useModule('xdc.runtime.SysMin');, p' I2 i( k0 b7 u) h
SysMin.bufSize = 0x1000;; ~; a1 v7 V5 N- Z6 B# Z, v
SysMin.flushAtExit = false;
8 ~& l8 Q6 p( s! h# C' G0 G9 h# w
var System = xdc.useModule('xdc.runtime.System');
5 B3 K) e1 L& W* \1 W9 lSystem.SupportProxy = SysMin;
: }/ A/ \4 f( W! R: u! \! `6 d1 `% ?1 P& u# w  e( U
/* configure SysBios to use the lower half of Timer 1 */
6 c! ~9 |  u( Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. |2 H- A/ u9 Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ w# a$ p! F2 D% N$ k% E0 ~' gTimer.timerSettings[1].master = true;
% B- B3 m+ P; w. @8 K/ QTimer.defaultHalf = Timer.Half_LOWER;
# p2 c3 S! i9 m9 Q0 eClock.timerId = 1;3 H, i( Y2 i, y# I- }

# }+ r( d5 r7 z1 M2 p+ a1 ]0 p& b- M. l+ P0 h- k. ]# C1 m
/*
/ Q- e; u7 a! _: W4 W* d. z *  ======== Miscellaneous Configuration ========) p9 I" M2 M& u$ L/ Q$ b) B
*/  C( v" _& ^% U2 [8 D) B% K

# s7 C* z# u5 b/ N) H/* set default diags mask */
9 b7 Q1 x. t. _2 w, pvar Diags = xdc.useModule('xdc.runtime.Diags');. l& z9 H( b. A' ]8 f6 j$ ]% y% ~2 R
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 e- \0 S+ L. Y6 f, M' K. [7 D  N0 `. d1 `& L* J
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 M  n. [9 H- m: \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 Q6 N6 e& ]. X' S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. f* G4 \; G, kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ g% C7 Z5 X/ a' }" M8 \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 F: T* R! I% NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ x! l0 b2 M- {0 jDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 K4 `. z8 q/ z- G: j$ @1 qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ ~- ?6 b: U! R6 X+ ~( gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- P- G. ]) H& y4 Z/ b4 Q- h9 sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 g# s: x9 o8 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- I& I( o: `' ~. \3 @7 g& }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 ]( j8 l9 c3 \+ vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, I1 |, \& _3 X9 _* N
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 ^2 O- |2 ]5 D1 e+ E8 N3 z; x+ _$ T. R7 j4 m
/* override diags mask for selected modules */2 a1 [! B( h" q+ L" ~# ^
xdc.useModule('xdc.runtime.Main');0 C; S: @1 o7 B* I" q
Diags.setMaskMeta(( n+ q1 i7 x' O
    "xdc.runtime.Main",1 p% [! J( M7 ]1 R0 p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& O$ a4 Q% s% k6 E( g" A  J7 P    Diags.RUNTIME_ON' P5 J* s0 B5 o7 q5 ~- r& V, S
);- q; ?& x" J! F; @; n, Y

: m$ ], w- l9 z4 e, \2 P2 R. pvar Registry = xdc.useModule('xdc.runtime.Registry');
! v6 b; U( K/ j) y+ B! S& V( ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, C5 A: {5 w) c; J8 W( i3 T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* t5 D7 f, M8 m5 N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 ?3 F1 L" K' M$ F, }( g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ L9 z0 R: [9 f4 M  v: r) @$ d: _" }( P) n! P- c
/* create a logger instance */
1 j/ F* n* k* d  o1 c+ T/ L5 F, L0 jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 B/ J3 b1 }" X9 s9 O6 z4 O
var loggerBufP = new LoggerBuf.Params();  Q& Y* M( B4 c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 }7 V5 k) q9 B0 C! w; `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. U; O; m- v  k' F* g$ A, Q
9 }, c5 O* f  L+ W
var appLogger = LoggerBuf.create(loggerBufP);8 s! c* [: `: R" }
appLogger.instance.name = "AppLog_Core1";
3 [" [6 e7 m! R/ R5 h* x/ U- t' I+ qDefaults.common$.logger = appLogger;
" e# v- [, W# O1 o9 VMemory.defaultHeapSize = 0x8192;   
# Z( H9 ^: I3 M/ a  j* NIdle.idleFxns[0] = "&LEDStatus";+ G$ ^6 q7 A6 G9 F
Cache.initSize.l2Size = Cache.L2Size_32K;
( g4 ?. _' B, S3 W5 g" [: S* A- B( U, Z( _' y0 o: R+ v; e
回复 支持 反对

使用道具 举报

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 */
4 \; ?1 x' M" a; w5 `2 Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  b4 N, S0 S8 d- x. l
var heapMemParams = new HeapMem.Params();1 O( c: s* P! f
heapMemParams.size = 0x4000;3 c0 J" S: l' p- `" q/ E
1 c4 ]$ Q2 V3 l% B1 j; b& l
var Memory = xdc.useModule('xdc.runtime.Memory');6 }% H# u0 a5 B0 m* [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& e" Q/ N% ^- I7 x. f$ f8 k- s. m) K1 R: i
我大约calloc  每次共计大小为5K*16bits,
) i# m, H( a9 Y1 I: v& Y, k) l而默认配置才0x4000、需要改大。
( A9 h, o2 m2 I  A
& q+ a* j6 Y2 W0 i2 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 W; X7 T  d8 U, l: rProgram.heap = 0;3 C) C6 ]7 H" b; ~: N9 Q
Program.argSize = 100;  /* minimum size */
/ w' f* ], m# zProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 16:26 , Processed in 0.040909 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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