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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( m: _. ?" @; d9 X6 ~/ S( I  j+ r' k" J5 P0 _
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 D, t7 Z7 W  C& Q

  ]- g" M0 }/ m: z. O, p其他程序段。。。。。
! Y9 L9 r! b" x$ O& p
5 E% |! `4 G* m# ^   free(x_d);: s2 I, r& i# R. Y- o
6 @/ t( n. {4 j& P5 x
使用DSP侧单独调试功能,验证动态申请没有问题,) p0 Z( N6 Q6 Z7 E1 Z, J
  i: T" M' I: j3 _  {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! e* {2 H. M! }  r
: o/ w  i. Q- Z5 p) c
! y& j) t* V# m/ A

- w, }2 u7 _1 m3 x0 ?  U2 b# P4 S) f- {8 r& V7 {

5 T, L" }0 F: q# H( V, K/ ^: @* ^( o5 j9 A

  t9 I; A0 D$ {3 o$ j. z7 l0 u$ M0 ]7 F) t# q3 O+ i2 S* j& O
1 F; p# _7 e2 @/ q1 S9 o

, i, U6 O  ~3 N( O# `' f! [* {
分享到:  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 */
/ g0 [( |, K3 c' MProgram.heap = 0;; s" n3 ?& l$ X9 L
Program.argSize = 100;  /* minimum size */. V: ]: M6 A$ k0 s0 E+ z5 I
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 y% t. q2 m& B; J. n5 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% v. W) }; u' Rvar heapMemParams = new HeapMem.Params();
+ @6 h; |# N! m8 I& v$ K! EheapMemParams.size = 0x4000;& v0 J' w) v; j
. b# ^! o2 [) ?/ _
var Memory = xdc.useModule('xdc.runtime.Memory');- g& p+ ]6 i/ _4 \! W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 X, v0 v! A' N( @- O$ N) n+ F
1 ~# C0 g; m+ ^) v3 ]/ B5 X我大约calloc  每次共计大小为5K*16bits," t  n9 c/ [! ]& p2 Q
而默认配置才0x4000、需要改大。
$ U' \( M, t3 k# F  N: ]) \; X& `( u3 O9 c3 @, ~& j6 i1 k, j
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
5 r' O' ^7 P, ~% \' V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ s( _" Z/ F9 C* A1 b2 {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ P; q: M4 N. l4 Z+ J6 b& Q
8 q7 k2 _6 ~* J+ N0 |
是不是需要在DSP.CFG中进行配置2 v$ j* A8 P3 i8 g* h" b  l. ~
我现在的配置为
. L3 _* I1 [4 _) G
, ~' s$ V! @7 w; y/*7 I8 H0 r9 d4 H6 \9 E5 c
*  ======== Operating System Configuration ========' B4 X' o; v  O" u9 c- b1 R
*/
# z* w  e/ Q( l) p# }5 ^; ]& ^3 }0 G2 e0 v- r
/* no rts heap */
7 N+ k8 c/ O. ?+ \0 X$ pProgram.heap = 0;' \( {' w7 W7 P% U1 Y
Program.argSize = 100;  /* minimum size */
* W, s  b1 Y3 X1 _6 S+ GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" G* g2 F9 t" F* L) I
- U0 P% F& m6 y+ S% B) i
/* create a default heap */
* g  }/ y3 v: qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 p# T. F6 Z+ ], T" g" E8 Y5 `
var heapMemParams = new HeapMem.Params();8 v" ], U6 Z, L) Y) B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# |" A# [/ B2 T  b
1 y6 P( o+ X8 s" p# c9 L9 p
var Memory = xdc.useModule('xdc.runtime.Memory');2 y4 A1 y! e4 @0 o: j- Z7 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 P' e$ n6 P& s( s- l6 X3 `. ]; p0 I  U
/* configure System module */6 B! l0 M' ~1 X# }  b7 B" k) G
var SysMin = xdc.useModule('xdc.runtime.SysMin');  Q& k& v0 E, |; g0 O! S2 T
SysMin.bufSize = 0x1000;
' h. N9 T0 q# \! }# |SysMin.flushAtExit = false;9 k+ h9 ^2 ?' z" O% k
6 k2 I# _6 ~( [) ^( J8 W: S
var System = xdc.useModule('xdc.runtime.System');
3 c/ ]0 M( v2 v( ?9 KSystem.SupportProxy = SysMin;
. |; k+ D: ^; T& L. R, h2 c
# _3 r5 W& r( H* l5 e9 `' ^4 D9 [/* configure SysBios to use the lower half of Timer 1 *// i* I1 Q& y0 ?( W0 D6 z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 K" U, \3 g1 J& G( c, pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ F, U* k  y/ o! S! l( ~5 pTimer.timerSettings[1].master = true;) d1 _5 _/ A6 r  F
Timer.defaultHalf = Timer.Half_LOWER;
7 g, h& O3 l/ p( k, G7 ^$ TClock.timerId = 1;) x1 u; J. i, X' B
- y7 T' |# [+ U5 e# M( N2 R; Z

; E5 w- K- P! {/ {1 ^2 ~/*
0 M  `% q( _1 T; ^9 G *  ======== Miscellaneous Configuration ========1 @9 n5 t: X$ k) G9 d6 X
*/% ~# y) o6 U8 a5 I

$ m; o2 E: G% |, y7 q* u  M/* set default diags mask */3 t( v7 M, @" x  [! Z4 C- v
var Diags = xdc.useModule('xdc.runtime.Diags');
* [2 I* p: E8 F/ Q7 N, `% zvar Defaults = xdc.useModule('xdc.runtime.Defaults');/ Q. X! e6 ]- f& L: r2 v" Y4 Q

  M. ]5 i7 S3 M# H% Y% gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. H  d, `" L0 Y" X! ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 B  z/ z* S5 {' L: x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) f, x3 I" Z' ]1 RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* D5 M- f2 o3 P. n6 \% }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 H# x2 m& T- p; H( p: u: yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. `, H6 t" h9 A4 YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ l# h; `0 s+ E0 C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 ?( U  B1 j& ^( @; ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& \. r0 E, k' O. N& j; S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 c) E5 ?  X: ^6 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" c# W2 |  O' X) g- ^0 u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% H6 E) E& e0 I. X4 w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 ~- @" s0 M: w0 g* k
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, ^1 O/ j& p+ U4 K( k* e
  G! e) l/ x7 ]1 B
/* override diags mask for selected modules */. q) p4 a, `& N2 Z3 V
xdc.useModule('xdc.runtime.Main');" J! J% M+ X4 f/ }; {$ _$ w9 G) j
Diags.setMaskMeta(
) B7 w" p( r* ~+ |! T    "xdc.runtime.Main",
) l7 c& i1 Q3 e- g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ j' V& @- {% Q, s* f( ]    Diags.RUNTIME_ON4 a- P' R3 r& p3 q, v
);% W: z. n- f9 n6 U$ U& l6 P/ Y

+ v' e- k: e: m5 A, l' @var Registry = xdc.useModule('xdc.runtime.Registry');1 j) D1 D8 Y8 r3 F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* u. i7 J; I2 U! R# m9 f8 [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% B+ g: f: }# }$ s' eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& j7 b$ `- y7 m( B' T( fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- c  Z% @$ {* p5 K
; R  t2 ?1 W+ ~6 A8 g1 J/* create a logger instance */
, l( ~- L$ L9 h: Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. ~9 E1 I& J& y0 j2 {2 }& c5 ^var loggerBufP = new LoggerBuf.Params();
1 a: U( e; r) J! j( GloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ o! B! m, h. b; Z' ^- a! L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* T3 ~: x" a) ?" y( B& I
7 M* [7 P, C/ B7 C* z: u" N  v* x- ?var appLogger = LoggerBuf.create(loggerBufP);
5 J; a+ G! ^8 L, d. gappLogger.instance.name = "AppLog_Core1";
* K! l% q6 B$ a8 cDefaults.common$.logger = appLogger;. P$ l8 y  D- g  W$ l
Memory.defaultHeapSize = 0x8192;    . C: c; n4 S" E; t5 Z; y- c
Idle.idleFxns[0] = "&LEDStatus";
5 e! G& }) w( j% pCache.initSize.l2Size = Cache.L2Size_32K;& {2 j8 H5 m: w8 Q$ M; @

% I+ d! M$ v) {" o$ \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 10:12 , Processed in 0.040719 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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