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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 E( J1 w6 |8 |$ u$ k
. o4 Z  U1 t! W7 W  T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ S3 A1 Q" \, a- x4 ]2 Q" b
1 i6 r9 h8 ]: U' S/ X8 X
其他程序段。。。。。
8 h1 r- K6 l9 V' R7 h& j 8 c/ V* c: i$ P- y
   free(x_d);/ G! T* k/ T1 |& u5 B$ B# s' u

: U" L& ^& X3 E3 Z$ F$ `: t使用DSP侧单独调试功能,验证动态申请没有问题,
- e! h; u5 ~- r  I# w
5 `; ^9 J+ `8 ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& c. k: X4 u3 f3 P0 B

0 b. }' d3 {) v: k, n
, u0 y4 T+ ]' ?( g* F! H2 P) X! g2 S1 ~8 Z% B2 V. _

1 Y! ?" m1 i9 b2 \4 S' z
, n. k3 v8 X* f$ \! I9 y& v8 ^
4 y5 x' O* n# g; I: ]2 G6 w) a  B/ {- }

' a( E! R" w; h" K
- I5 r9 [; n7 k' m0 ^  C) j6 X6 x0 \8 Y: G: X
分享到:  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 */
) l# f+ ~& |8 f  FProgram.heap = 0;
. f& F% L+ ^  F" t/ w# cProgram.argSize = 100;  /* minimum size */, X9 H' \5 }' o2 T) W, m; J2 x, M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 u7 s) Y6 c! R1 p+ ?9 f* Q3 V' zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; F0 r. H  T* u/ O! O  bvar heapMemParams = new HeapMem.Params();
* @8 y. v( r# q+ I) @heapMemParams.size = 0x4000;& K9 U: x6 v7 v" x% d7 Y6 ^& V* h  C
$ r, v5 M0 K  ~# x. s/ N- W4 L4 L
var Memory = xdc.useModule('xdc.runtime.Memory');
+ m' L; g1 @3 I% i0 L# EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* O( f* n7 n( H7 u; t, j, Z! X. ^6 R# S4 Y! E; `/ K
我大约calloc  每次共计大小为5K*16bits,
- d) J5 U' a+ Q& H7 I6 \+ q$ \而默认配置才0x4000、需要改大。
% ?+ _9 q5 R+ I5 L$ L! Z7 z& p
3 ]. B4 a) Y: h4 @. E
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明3 i6 F% v  ?* [5 [* R# N6 U4 p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 F  U6 ?# H- a4 ^% ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 t. n. a9 i, W" t
' D- R4 Y1 x9 v2 @
是不是需要在DSP.CFG中进行配置0 g3 |% c* W1 y/ [2 y# H( y
我现在的配置为+ e& _5 M! ]( N! [( F! |

( D2 ]5 J( R2 v% r1 f2 N1 `/*
: H3 |. O( _: N0 F. T2 { *  ======== Operating System Configuration ========
* z8 Y5 _) p9 | */9 a( W& D$ o( A5 t9 H& R4 }" A
! s: q4 \0 b; r) _2 P
/* no rts heap */
# m% J7 _3 F. n' x. M- X0 [Program.heap = 0;! `% G* p. ~, W( J8 f
Program.argSize = 100;  /* minimum size */
. A( x, D+ w9 z1 I5 x: sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ ?/ `$ P2 n/ [; V( D& t, a+ a" ?  x4 Q) c3 a
/* create a default heap */
9 r; s$ N  D9 B1 H  }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ \  s4 X" n: C9 G% o
var heapMemParams = new HeapMem.Params();
% I. Q7 a) j& p2 r0 W# g' Z& ~5 iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 N, I9 V# M6 ?( A

/ F8 \% k' j8 X/ M" h
var Memory = xdc.useModule('xdc.runtime.Memory');
7 b; E/ C/ ~( W6 W& ]$ I) B4 GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! c6 M0 S' k% W# V' O% z( l. i
$ S( @9 B6 t( z
/* configure System module */
9 @! r" `% f$ R/ \; M' P% v3 mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ r/ W* j; _) G; ESysMin.bufSize = 0x1000;
9 a  @: J/ b: NSysMin.flushAtExit = false;& ~" K. N0 T: c

0 S* ~' a% G9 ]- i+ \7 p2 K4 U9 ?' nvar System = xdc.useModule('xdc.runtime.System');" J9 r( _2 ~' Z2 R/ |1 o
System.SupportProxy = SysMin;
2 z: N3 B# H5 Q: Y; K6 F* z  E* J( t: Z5 p& o: v& n% @- W
/* configure SysBios to use the lower half of Timer 1 */
8 h) b1 z% ^/ A( [3 Z. \4 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 k/ q4 P0 ~( j' U% [5 X. b/ K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) _$ x2 o9 b& k6 ETimer.timerSettings[1].master = true;5 V) Y( w  ^4 H0 f- t- c
Timer.defaultHalf = Timer.Half_LOWER;' i2 ?( r) R' i% m
Clock.timerId = 1;. Q6 O" X2 H9 e6 m; ^  k

9 T& K' @4 s( s; v
$ n8 _/ V3 i# W" u: V6 W) M2 S/*
4 U3 U. a# _8 Y1 ?0 z *  ======== Miscellaneous Configuration ========; j, f% B/ t+ T( Z6 b1 ~" j
*/( S7 i: I3 a! j% F
  I' t% o0 Y# x9 ]$ Q, y
/* set default diags mask */! W( p5 w! P+ Z6 A5 H
var Diags = xdc.useModule('xdc.runtime.Diags');5 q" Q, |1 V) B- E: F
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* |9 E. k8 [% c" p2 u
0 f, c- T3 @& W' ]0 tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; c6 L% [; x; \7 c9 LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, H4 p; c, @* x% T+ `* P; WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ M- I1 v! C/ G5 Z6 P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% g! E" }* o9 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% f) d: \: L1 Q4 n: w3 M- X
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 X$ L; Y" E0 p6 {0 z* S! LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; [* t' c: n' @; F0 Y3 `0 q1 ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. b- y4 m6 f% x/ D# `- }( K2 vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ T3 D* Z5 B/ p5 N0 a* k' b) cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ C! y7 x# ], E. L& g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; z0 N8 P5 H$ C- H2 C
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ W% K1 n# B* L( ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& X9 w8 [$ H' L( e$ gDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 h1 ~+ x# F! W, p$ H# @% }) H, h3 \9 H- T
/* override diags mask for selected modules */
4 C/ s/ Y- |7 b9 Sxdc.useModule('xdc.runtime.Main');1 @7 _, x4 ~$ }" A5 B. B" @
Diags.setMaskMeta(
; `- A$ a) ]" e, N$ }$ J  k6 X) A" U2 I    "xdc.runtime.Main",, {5 B5 u( j6 X4 b2 ]- ]! O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' h0 Y( }% a5 v! J  a    Diags.RUNTIME_ON$ T2 L& O4 N+ |* o1 y& ^
);4 P5 ^, z0 v# o9 e/ M
7 i0 c1 L: N7 w, l& ^
var Registry = xdc.useModule('xdc.runtime.Registry');6 G3 h9 Y( a# X5 J7 Q; Q( }5 @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- D4 `  k% Y* y# X$ ~* a
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% ^; B0 r3 {/ V  I! ]+ G+ U: M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 I' d1 ]# h/ A; U7 Z3 V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- `/ v5 L" P: v' [8 W
1 w' d4 R* R; R# J& E' X% t7 C" X9 I" s# s/* create a logger instance */
$ ]0 U3 J9 X5 W, r8 Q( Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 ~$ K" X) Q2 [8 W# `, t
var loggerBufP = new LoggerBuf.Params();
! ]! A+ b0 T2 w5 H! hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% K! O1 }1 M/ v+ l. e) d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 p, T! l. O% J  C1 @3 X0 Q" ~% z; y8 Q' [
var appLogger = LoggerBuf.create(loggerBufP);
/ _; ^4 v( w! x: HappLogger.instance.name = "AppLog_Core1";/ k, \+ {( J: v
Defaults.common$.logger = appLogger;4 H" m" J! N  Q4 w
Memory.defaultHeapSize = 0x8192;    % n3 I8 k1 D4 L8 c0 Z% t9 t
Idle.idleFxns[0] = "&LEDStatus";
, ]9 K; Y/ d, _% v6 ~# w# L8 qCache.initSize.l2Size = Cache.L2Size_32K;9 f4 I! ~+ o3 C3 }& i1 A
8 ^) A" f! C) A, N9 K+ [, j
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 03:33 , Processed in 0.042608 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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