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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 ?; s4 x' h  f3 z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. T, U8 [6 H+ E4 O0 ?6 n6 Q; ^2 \/ \) T% y9 o, [5 v8 [, B! M
其他程序段。。。。。$ m/ E% J2 ?! |3 m: b
1 L! f  a0 z7 a% i8 G
   free(x_d);% `2 V8 y: C$ M( b' S# x) B5 L$ h

; \4 r" F: M' `' g; \9 L使用DSP侧单独调试功能,验证动态申请没有问题,
# c; Z' {: d8 A) ^% G- y8 J7 Y7 G
( E9 \+ [- x  R; c4 @6 o4 g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; u- C/ x2 F) q( j
: G# x1 n  _, A1 k) p

6 j3 l" ?# z7 {! D
" K' S! c8 l7 V  m  v* x+ f
# {4 D+ p& X4 \7 S3 j3 u- X* e" N# H$ g

5 u% r/ j6 q0 s4 Y+ U0 [, U% L; A, K) O) F0 v
& o2 F" v/ {$ Y) E6 ~8 T. @

! G1 Q& n/ \* G7 O1 x
' D2 C/ ~: f1 ^  G( w0 H
分享到:  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 */
$ v2 [! |3 m* i" zProgram.heap = 0;7 n% w: P' k5 N
Program.argSize = 100;  /* minimum size */
  t/ O3 b* M4 I" l. v: n& F  F# f( KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
7 Y: U% U; G1 X: p* a0 c. b, kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ J  o/ r% [. b8 w8 V! H+ m$ z9 qvar heapMemParams = new HeapMem.Params();
" x. |/ F; M7 ^' J) KheapMemParams.size = 0x4000;
. V) ]) [* l, z( s9 R) W' J
/ L; b( w  i: v: K& y. R2 |6 uvar Memory = xdc.useModule('xdc.runtime.Memory');+ u4 `; P- Y$ X% I! k7 {- I- ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  s$ H3 D7 ]+ S1 w' `! w

  [( P! Y7 O2 n4 Y我大约calloc  每次共计大小为5K*16bits,. P7 Z! v+ ?4 y5 [
而默认配置才0x4000、需要改大。
# v( W' d) o5 I
# f; E% I( K7 L! D' W
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明/ Z% _6 j& x8 @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ F; ]5 i" K" _! h( Z- a5 E3 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); U4 q" Q7 h+ U# R) R( n% K3 V

0 B9 c& z0 u! C$ `' V是不是需要在DSP.CFG中进行配置, h  B7 R& r- v' B
我现在的配置为0 Y9 Y' q4 U4 T6 J

) n' X" k7 S- [/*
! |8 h9 e+ O1 p7 y! x# U *  ======== Operating System Configuration ========& }7 u3 e9 L( n, W
*/7 w9 p0 V. z& l/ {

% |  X" j, W/ ]  [6 y9 a/* no rts heap */
4 v/ B8 R* n1 O1 l' c7 }Program.heap = 0;  b) S4 \/ K* G" i
Program.argSize = 100;  /* minimum size */
, N6 x9 F4 Z8 {. J# U9 m$ sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( U) ~* q: ~8 _4 }* r- o
1 a& l: R+ ?) E# {. h6 e5 H1 B
/* create a default heap */
" P- D9 ?7 N. P0 P- _, s* P& Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 q, n/ D7 Q) n, w# T" x! i1 pvar heapMemParams = new HeapMem.Params();
; x+ |, y3 f+ a1 H* N/ y3 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% M3 t- g7 }) H# k9 b6 |" o# ^7 C$ k0 h& q8 D, ~2 ^
var Memory = xdc.useModule('xdc.runtime.Memory');9 Z9 E2 T* y7 o* ~4 T$ B7 g$ c1 d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. e2 @4 o* ?2 G4 l; }0 b8 W9 r$ n1 Y( C/ A3 I: [5 h+ g# F
/* configure System module */
7 U) L8 m; p! T# B$ A) H3 @var SysMin = xdc.useModule('xdc.runtime.SysMin');2 o5 Y" U! L, X/ U0 u4 ~7 E) B9 X
SysMin.bufSize = 0x1000;* H6 i# N% q8 N
SysMin.flushAtExit = false;
" U6 I5 u8 w5 v3 c8 v4 R0 k1 a  E% ^# o1 {7 T$ P. R2 C( j6 X
var System = xdc.useModule('xdc.runtime.System');8 F/ v+ U5 [: R) S( n( _
System.SupportProxy = SysMin;! w; W* t9 F3 @7 N/ |7 Y6 l% p
& x5 E- ~6 W" C# a( j( b1 p+ W
/* configure SysBios to use the lower half of Timer 1 */, |9 q6 b3 h' a* g1 x8 C) y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. m7 k" p' _# `- [" p6 nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! C) j, X# C5 l* ^0 v1 g
Timer.timerSettings[1].master = true;
  {4 I2 R; P: g1 q* w: Q( S* d" @) J- CTimer.defaultHalf = Timer.Half_LOWER;% w) @* h+ V4 e. M' T/ z) u) e6 v
Clock.timerId = 1;
3 B8 t1 T9 a8 f+ ^5 }, I" d/ N  w
% i: X$ k9 `" ~  k  r+ O
/*; j3 F2 S8 L- A" B+ t
*  ======== Miscellaneous Configuration ========4 V; U, _$ F% C; ^0 }+ ^
*/
8 o5 T2 l& r9 K0 J6 R% s4 z( A. C1 Z4 Y# g
/* set default diags mask */
3 g7 a# X5 U( Bvar Diags = xdc.useModule('xdc.runtime.Diags');0 D0 e7 E, x& v: A# N/ Z0 X7 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');
( Q8 Z5 q2 Q7 D# R/ _% V( d7 Z" a6 v) m  x5 Y+ k6 |" r/ J' K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% t, _! ^7 K' A4 c  l' [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# N4 r8 A+ l' L  e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ p2 t# W. @5 q0 q) e! B8 u1 _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, y( r0 s: k$ K, S$ _  Z7 S* g! p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& Z% y0 t1 C' c- n- fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) n3 x5 C0 [: p" SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: p( A) q. L4 k3 n: P6 SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 p9 a4 d% z7 N7 T2 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ S7 c1 j; m+ T! z, G. e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! ]' N  F' Q: R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* w- z+ j( F0 U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' v' M' X, \& j3 r( M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 k7 j8 e  W* M& S0 d- Q  g* c1 DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 q& V3 r& i2 A9 Y) `5 ~$ F: v  Q
& O# t. @" K9 H/ ~8 `) r, h& n9 i* `/ U
/* override diags mask for selected modules */- y6 q# v. \2 W; l; p2 D: Q
xdc.useModule('xdc.runtime.Main');
9 D, o* b" a" }8 P3 ODiags.setMaskMeta(
% _/ y' ]8 `4 W( e    "xdc.runtime.Main",
7 E0 R, \- r( o$ r9 P+ U    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ S" J8 I- @% b8 y3 T. L
    Diags.RUNTIME_ON8 o* s2 C+ W7 x- ^( G7 c
);, t! u9 |9 r, m; b- o
' _6 C2 y0 y9 s; c8 F% F  t2 W
var Registry = xdc.useModule('xdc.runtime.Registry');
: M# d% Q& s# Q5 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* ]* y! K0 ^3 g, Z; |* d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; ^+ }" K. Y; R7 w8 h& HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 x/ @! Z5 b" ~2 D9 v+ T4 @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 U5 z8 s* D' ?2 e( F
, X  w( r& V: C. F) ^5 J, E
/* create a logger instance */0 o4 G2 j+ ~0 U- F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  I; U; N+ t9 s3 g# D8 K" q* z
var loggerBufP = new LoggerBuf.Params();
  k6 h- d1 L5 E, A' Q" y1 PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' m1 u) w6 P5 F3 F. F4 P7 E7 D( }7 u0 k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( [! |, r* Y; h" n( N
4 m3 P# P2 Q9 k- Svar appLogger = LoggerBuf.create(loggerBufP);
8 W  y% r( u3 m+ r9 O" S- LappLogger.instance.name = "AppLog_Core1";
0 j6 u$ [; p9 V6 w# ~3 iDefaults.common$.logger = appLogger;" M5 \; G) F! \3 ?$ k% C
Memory.defaultHeapSize = 0x8192;   
1 o' l9 D/ N7 `/ o$ lIdle.idleFxns[0] = "&LEDStatus";
- s& ?3 J1 v  z+ |0 q: Z! sCache.initSize.l2Size = Cache.L2Size_32K;
; P: z) T  ?4 e5 D: H1 K, z: v( T1 k" D+ W7 O5 b: v
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 04:30 , Processed in 0.044346 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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