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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 l' X+ v/ s  l3 F

! ?. W+ @+ p# q0 b" t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% |8 p4 ~7 s5 K; J
) ]; @; x- U1 F  ^% d
其他程序段。。。。。5 Z) y( w0 e; a/ W" P; a
& c8 [! g9 o( D+ C  Q# t
   free(x_d);
. U, [$ O9 @1 q! J0 _2 V+ y$ O/ W. T( s" }* n
使用DSP侧单独调试功能,验证动态申请没有问题,; ^/ H, c- C4 W7 i+ |
9 y2 Q: z+ S0 `; p
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- O) m0 W2 a: b$ X$ C; Z- d

; ~1 F& g3 I) X, f: E, z$ u
' ^. ]1 i9 r; m% l
. g, j) u/ d+ x: p" ]
0 a  n1 O# Y. |2 ~0 M
4 F+ r$ k) Y/ w. [- q
4 M& O: R' h6 y8 l2 V; \4 [" y% l# l& h7 q8 R* h( T1 ^

5 q  ]" h; X5 _4 D* l) b* S& B$ }' m" ?$ S  C, U- `3 \2 X- X
7 n8 Y- @. n" z7 r. Q9 I# }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: U: f4 A) T/ e6 M6 z" b% u: F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# A7 J2 w6 }5 D& Q1 i4 D(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" B: l; H& @, U5 N
/ g5 k& H/ D/ O6 E
是不是需要在DSP.CFG中进行配置
7 K* c3 Z, m, a# h/ T! T我现在的配置为( `# p5 X1 _4 s/ Q% A8 e% w+ y6 O6 Q
. d& _7 j- x' r* Y. G- y
/*7 H( M9 [! x* M) x& b! p% D
*  ======== Operating System Configuration ========
( z# q+ _, H5 i! w* q$ \ */0 ^; ~8 t- c" C6 \9 b

1 ^5 `9 u2 F  @+ B. l/* no rts heap */+ H- \. h7 p: j/ L. O$ `
Program.heap = 0;
; L2 Q: {) f8 N- zProgram.argSize = 100;  /* minimum size */
4 Q5 [5 J1 Y* v6 _3 L4 vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 I: \7 F0 u" r9 P
3 @, ]2 K- u& `; a8 [/* create a default heap */$ N: T% J& m0 @" }( I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 T6 l$ Q7 H# G" P! F  U9 [) ~var heapMemParams = new HeapMem.Params();8 V+ H7 K( P3 V0 e4 l$ Q7 B' R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 f1 l2 y( [3 a! H- u3 {# e2 U" v8 e6 D# v
var Memory = xdc.useModule('xdc.runtime.Memory');# t3 X; t4 m. v7 A, X; q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 F5 n! F/ L+ n) g9 j2 R; I7 i
% Z8 ?8 X- L2 s; u! q/* configure System module */
! y5 Z6 u2 k0 hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
* f* A0 j2 _# P7 xSysMin.bufSize = 0x1000;
- `2 @3 I0 w+ RSysMin.flushAtExit = false;& B7 A6 s' b1 U3 \

1 j  D% ?: [! _var System = xdc.useModule('xdc.runtime.System');0 l3 ~6 Y, q9 X% k: g  l" _
System.SupportProxy = SysMin;. B1 ]+ w+ g1 N" k

5 Q- ]0 k2 c$ k1 ]  b/* configure SysBios to use the lower half of Timer 1 */
. n2 }1 p1 j" L0 s' ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 Q; |. q+ A; h. ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 i" d- m/ Q- r- h7 R: v: H( mTimer.timerSettings[1].master = true;" Y9 q9 r! |' N8 ^, A# \
Timer.defaultHalf = Timer.Half_LOWER;
& x  n: o6 i4 i6 i' hClock.timerId = 1;$ x' q, F/ m3 C% Y3 N& Q
, B# P- @2 f8 N, ?* [

+ i! t0 M1 C6 g8 K) @/*+ T) S# q$ Z" J# y' {
*  ======== Miscellaneous Configuration ========* E1 P3 R( W$ J7 }- D/ d( B# A
*/' q- }2 U4 m4 h- y; c
4 B+ x* y1 N: ]8 Q% M6 X
/* set default diags mask */
9 L. Z7 b8 P9 K: J/ h8 L2 b$ [8 d2 Jvar Diags = xdc.useModule('xdc.runtime.Diags');# X7 w8 [( U* t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 a$ f* C; t/ y" M+ p4 Y: v& c& v& H& `% [" l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 P! h' f/ N* I/ VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- M# |) ~& }  C# a) z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- ~" z1 x- c1 R7 e0 K& F" pDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 T' E  \  }% ]( C8 j# W' uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// o: O/ p2 D; U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 o- @# L6 i! b2 I6 z) Y: J! J& c, Q, g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( ^) p# P2 T3 \. e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' V. o6 A: Q( s/ w' X4 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ H& j7 s  j+ M/ x5 i- ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. s1 k9 z' w) B7 }0 D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 M- M& [" j0 M/ cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, Z- p" E3 S* O( x  HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 W5 j8 [4 n( m5 c& y2 V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 W8 X4 _7 W( N( N+ G/ ~  E' z$ A% B9 p* Z/ Z- m
/* override diags mask for selected modules */: o8 B0 \! ~6 E, g
xdc.useModule('xdc.runtime.Main');; Z1 I* Z& s& M7 [
Diags.setMaskMeta(
$ Q  j, g) j! E. c# ^    "xdc.runtime.Main",
9 X6 H7 I3 ~' S3 n; g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* ~" c0 l$ l- ?    Diags.RUNTIME_ON
: ?: W3 C5 {5 ~; h* J);6 n: p& m2 V+ I) |

, I! @: ]4 a; Cvar Registry = xdc.useModule('xdc.runtime.Registry');
7 e5 y; E- i3 }0 _- O' ]1 n4 J1 CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! @5 P/ n4 [; U' R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 y1 y/ U2 [' i% `- @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" R$ \- z' R+ K5 _) H& CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 q: h. H. s0 |! @# d
  h0 z3 P' Q6 W% V1 K
/* create a logger instance */
: h( Y& y  v5 [' p4 `  `8 P& L) lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 l/ \9 I8 P) D, Tvar loggerBufP = new LoggerBuf.Params();
( }$ |6 `; B& ]- uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ R: M$ \0 c# v: g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( q$ ~( ^* `- U; [# F9 j6 T

% D. J2 t$ |* ]var appLogger = LoggerBuf.create(loggerBufP);
+ p0 S8 J6 h. l- l2 FappLogger.instance.name = "AppLog_Core1";
! m- r6 }! q/ UDefaults.common$.logger = appLogger;
$ _) W5 d4 m# T6 P$ jMemory.defaultHeapSize = 0x8192;    7 i  O& a4 o( e
Idle.idleFxns[0] = "&LEDStatus";
- B: x: D: ]6 K$ g1 u% VCache.initSize.l2Size = Cache.L2Size_32K;* U# y* y5 }7 R0 f  V. o
+ l  q* n$ ]! T. Y* J* L/ C! M
回复 支持 反对

使用道具 举报

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 */: L( \; O; l: r) p1 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 n1 c, u- u6 H$ Q% d7 Z$ x; Zvar heapMemParams = new HeapMem.Params();
% g7 K, @  V1 H$ F8 S& E+ ]heapMemParams.size = 0x4000;
. F$ @) \$ q7 _4 E- j. O  `, |0 t2 z" J# X6 z/ M' G/ n7 S
var Memory = xdc.useModule('xdc.runtime.Memory');+ a( P. w  ^" K" n$ J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! z7 Y$ h9 A1 N; P- j- j
, e- z' f4 k" O# D; U1 s
我大约calloc  每次共计大小为5K*16bits,
8 Y; k2 R% n8 q而默认配置才0x4000、需要改大。
& l- b3 ~- i5 N, F+ _' u& ^: ^8 k1 T* |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, C* s; C+ L& c- Z1 z6 o" rProgram.heap = 0;& o: x3 ~1 F5 f) }' }
Program.argSize = 100;  /* minimum size */( c7 C( U) Z4 P2 J
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-20 01:12 , Processed in 0.041116 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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