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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 {; _6 o( i9 K. I
% C  r6 A9 ]! c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' w. y2 L9 D8 z! j

5 `, k8 @5 Q! w2 e8 W% s, [其他程序段。。。。。& }3 P2 R. v, x7 U( q' f

+ B% F7 n2 e& r7 k6 \& a: V  M   free(x_d);
: ^+ F* r6 Q/ S/ m2 C% u  _5 i$ V3 ~' q6 u; [, e0 I
使用DSP侧单独调试功能,验证动态申请没有问题,( {+ \  U5 i5 J' w
; A" ~: v3 c# F+ C7 H7 d0 Z; \  j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& \2 R2 d9 t& e

1 k# L1 u- X- {/ [, D( f4 t. ^9 R  M4 M4 Q8 K* l4 S8 b9 @* I
! w  ]; z3 z$ d+ Z6 p
1 b7 I# ]2 P# u9 ^/ j) a

6 p) G, f) D$ Q1 N, p
3 ?2 I! W; r4 N
, r  j5 u; s  X) y
2 ~) r" {0 X9 ^9 s3 o$ J+ ]! k% W* ]+ M! I# A/ N; U8 L) g+ z  g6 K/ D
9 g- X) _( b$ o4 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 \; p" ~, L! {" Z; x* n- F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) \; s- s+ V0 F. Q7 Y$ G' q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 n+ N/ I- B; V
9 K1 ^  s; X% l' y% u4 W
是不是需要在DSP.CFG中进行配置
9 L7 I+ [  ?7 j+ @$ D我现在的配置为1 ?, K( y  t" R9 h! w$ ~# ]

9 c) u' f2 h/ j' L0 B. D/*
& a; q3 V1 ?& U *  ======== Operating System Configuration ========
& [# M2 L+ }) X! \8 l0 ` */
/ N0 F6 A% u; }: o) I' w$ x1 i, e4 i( y' M
/* no rts heap */* k* J* `2 q+ ]; X
Program.heap = 0;0 ~. F- I. s3 d7 K8 p1 R8 U3 ]
Program.argSize = 100;  /* minimum size */" C4 K! c3 A, Y: R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 w( R: }2 @& a, I  K  r

/ Z8 {! c* w8 {2 h; N& a. V/* create a default heap */, T8 `$ k7 S# n" |& L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 L# }, U; r) B6 Y% x3 e
var heapMemParams = new HeapMem.Params();
" o  A' M  m$ E; \9 |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" g6 c* c& x6 m% F
8 g- e* @/ |$ U: X9 K1 ^( M
var Memory = xdc.useModule('xdc.runtime.Memory');
* P& k9 R$ [: m6 `- C# wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% a! c  T2 \: D: n  I

% w1 V- X6 v4 H- i$ D* q/* configure System module */% r( A- J1 M: z! _
var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 i5 ~% K* m0 |SysMin.bufSize = 0x1000;5 O3 y4 D9 K$ D% z7 S
SysMin.flushAtExit = false;
/ z, Y1 k! c* b8 i2 r6 u: s2 D, a% j
var System = xdc.useModule('xdc.runtime.System');
) \1 y5 }/ U- X$ q1 C% HSystem.SupportProxy = SysMin;
% o" e) I) Q" Y; n/ e; r! X6 ?
. [/ j5 L5 O$ G; ]+ [/* configure SysBios to use the lower half of Timer 1 */' ~7 B( _2 V  O4 p& ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* W/ k! h- k# ~4 ~. ^0 Q) M! Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');- c( n) d. l$ ?- E( a( Z  d
Timer.timerSettings[1].master = true;: f/ n. {1 z# M. }! Z7 x0 f
Timer.defaultHalf = Timer.Half_LOWER;
8 i, b# k/ z! TClock.timerId = 1;8 f* J! ]4 j4 y! A
5 {2 s" d6 X/ B
3 E) `& u5 ~- y* H* o+ C
/** x  e- U" L6 p, }% C3 J
*  ======== Miscellaneous Configuration ========
; V4 T- W" e, {; R */
6 }' s9 |+ _5 x! x0 P
$ n8 g! \. P9 k" [/* set default diags mask */
* }% ~% N7 W2 t% dvar Diags = xdc.useModule('xdc.runtime.Diags');6 u; P6 r' v% w# C
var Defaults = xdc.useModule('xdc.runtime.Defaults');. V8 w, e8 K9 D% t9 p

: T/ A8 b  M& y" U) ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  h$ q' l' x; c5 F- }7 w; A& cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- ?/ V3 ^0 Z( [! `* `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- T- o" X+ v9 r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) P( }. t& s" \# z3 h$ ?1 K0 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) X7 M$ Y( I3 x# q% z/ ]5 }8 E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; L" P. X: a5 _! bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# j0 [$ U& k+ V5 \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 J- c- o* ?8 y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- c) O2 u% j& xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* C2 f# p2 i9 mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 I  ?+ y, w$ _8 o3 Z" h' ?: b4 `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  M) z7 j/ t5 z1 g# H( `Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* }# k9 M( u5 @8 o( N0 CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 `! J- R. o3 {9 U1 b) A
% n, ]8 k; ]1 N4 E( H% |6 X/* override diags mask for selected modules */  J3 g7 v9 d4 E2 h8 s) d0 e
xdc.useModule('xdc.runtime.Main');
8 K9 M' W: [; w$ k1 X; y0 f6 sDiags.setMaskMeta(
' m  m6 x* y! z( n$ M# i    "xdc.runtime.Main",
' C& h) R2 y: c# u% W5 T    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 j' s: l7 G% y) v1 Z    Diags.RUNTIME_ON& B9 P/ ]5 _! s; h* t7 K! D
);3 |( X, I1 e& P* f; n: ^: X

: K2 w- i3 u) @8 }! K4 c* A* m/ Jvar Registry = xdc.useModule('xdc.runtime.Registry');% A; m/ T, t9 ]$ u2 x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- C& J, L0 V( O9 @; m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 a2 ~, j1 h- ?* D- B5 F; R: FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ V& \& n, B$ p& O% C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 `6 t0 Q% O4 I8 v6 \( N$ e. r9 w
4 j9 |' g4 d4 E
/* create a logger instance */
5 A# [  O6 D) b& g4 L2 Y1 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 t6 p3 K5 k. b7 T& O& P
var loggerBufP = new LoggerBuf.Params();: e! L+ Y* g$ t" I5 z; d5 p6 M. h! o" k& \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! s+ I6 G4 O" D0 N) O* XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" @$ ?; L! U. }( a- ^6 G9 S# ], {  U- F0 s: e
var appLogger = LoggerBuf.create(loggerBufP);
- J% Y* T  r" S' h  j# NappLogger.instance.name = "AppLog_Core1";1 D: l( Y7 T6 H) A3 x" ~
Defaults.common$.logger = appLogger;
% k1 D+ c* Q( Y1 I  oMemory.defaultHeapSize = 0x8192;    ! a( n9 H- b- j
Idle.idleFxns[0] = "&LEDStatus";$ ~2 w! `' T6 Q" ~/ v6 A: P
Cache.initSize.l2Size = Cache.L2Size_32K;
5 g1 V! H* b7 N$ r& r2 v8 @6 \9 f
, v! `5 W7 [2 I
回复 支持 反对

使用道具 举报

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 */+ F0 Z4 B9 Q5 u0 s5 K" \/ h& H; K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# X) R& M! N. Y# k/ W+ t( D+ U: y0 W
var heapMemParams = new HeapMem.Params();8 \+ I, p) R1 w* J
heapMemParams.size = 0x4000;
: T, l" X# r  K1 f/ e9 B3 d- Z4 W! N( e+ @1 s3 Z
var Memory = xdc.useModule('xdc.runtime.Memory');% n  v3 v+ r* e9 A% p, U0 C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 b9 E' _5 |# b: r% u7 I- n

6 j% Y; H# ~$ d/ C0 Y6 c我大约calloc  每次共计大小为5K*16bits,4 }5 ^* P9 p) Y
而默认配置才0x4000、需要改大。
) h/ k+ h: u( M( Z% M2 f
+ a) N$ @, z7 `3 A* l, w: K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ s$ O* X- n) j7 zProgram.heap = 0;' M; G" C4 ]! Q8 ]1 u. x5 j
Program.argSize = 100;  /* minimum size */! J9 i7 H3 T+ [8 P" N
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 14:59 , Processed in 0.042692 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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