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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) X: Z7 ~  f  }% w
9 w/ {/ i  k9 i% C* a  i; r0 [% ?4 o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- w+ v5 X1 a" b& U/ a6 d

- P4 y5 k2 [" d7 n) e" k$ a其他程序段。。。。。
! ^! F) p- n5 a# T4 a3 m) a 9 d& S, i5 @- _  j2 B( T' C% g
   free(x_d);
$ I! C& ^7 p$ L  ?$ h( e8 m
) n7 ^+ S: P* x# @使用DSP侧单独调试功能,验证动态申请没有问题,& ?) n+ D; M) `

( }  c& d9 O; R% {& M/ v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 e4 Q: H% }4 |, R4 G; K; l

+ X6 X; O: d% Q0 _
' N( F/ {! e! \- _7 h( K6 V! D0 S" h# S
, v: {5 p" ^1 d5 Q, }/ m
1 v! |% \0 H' }) r4 Q% c% x
8 F) g  |5 F$ M
) U) z; @8 r5 i! ?5 }( o$ K
7 K, C# }# v, o4 L# k1 D& E- _6 s% y  D/ s. u9 O+ b4 [% w5 G8 a
7 w& r6 N& ^$ e" |2 p" @$ ]9 ~
: Y$ T, \4 s& t0 ]% Q2 H1 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ q" ^5 e# T% e8 e; v4 F& C, m
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" \5 k; _! v; d, T9 S7 U
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) k4 ?$ }' P8 N: @
8 U5 G3 D/ O# I& s* r
是不是需要在DSP.CFG中进行配置; R8 ~- ]# N2 S& X. y. M
我现在的配置为
- Y0 M$ h* M  b3 a8 ?$ c! A8 U0 ?! S+ s7 o
/*+ T/ ~9 E1 w- |. |  i) y6 r; n
*  ======== Operating System Configuration ========
; l) f; j% @# _9 f& z7 K; ] */
7 j, ~7 H5 N8 e4 u
% G: N8 z* @4 Z' b5 u* }% I/* no rts heap */
4 S! S1 f% T8 XProgram.heap = 0;' J1 t. L% @( W' W, g; U. i
Program.argSize = 100;  /* minimum size */
' g2 n' V( `! ^% z! SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ n. z# R, G4 }' k) O3 U
& B' D5 U2 u& U' J# _3 y9 h* Z# x/* create a default heap */# U8 \& f. f! |. ~* Z6 b6 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- x9 y( F$ W) c; w- e5 Kvar heapMemParams = new HeapMem.Params();' s, n* E" a, [/ G. M3 Y' O/ N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 _% ]' }9 H- W

- B9 z' m9 e6 h" g5 R! b! `; U: r
var Memory = xdc.useModule('xdc.runtime.Memory');
" H" Q( N2 z* }( k% cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 Z3 I3 h. J4 Y* {1 i8 e" p4 I& v1 T9 W8 [1 A1 G$ a
/* configure System module */
; R4 u' ^; ~; l# c2 n* p6 K6 ]) ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
  R% t  s3 }# m3 gSysMin.bufSize = 0x1000;
7 q( s$ ^" t! f) P% SSysMin.flushAtExit = false;
$ R2 S0 U" n4 r9 q: U8 |* u6 F1 K! K5 P
var System = xdc.useModule('xdc.runtime.System');
5 E3 A. r' S6 p# V6 w% @System.SupportProxy = SysMin;
* H; m+ b% m. _  j  p2 z2 h: n( M+ C9 @
/* configure SysBios to use the lower half of Timer 1 */
4 Z$ y! h# ?3 P: I2 I7 yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, \4 Y5 a/ m0 K# s& q3 G% A+ C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; [+ D  d: E. N$ A" J' e$ Z# _
Timer.timerSettings[1].master = true;
' u3 i8 s# ^& J4 M2 ]4 |# ATimer.defaultHalf = Timer.Half_LOWER;
  i) B. ^: W* a( W  n! U( v. a) QClock.timerId = 1;& L8 h# h: G: h+ V1 v  F  o
+ P4 m2 ~! t# Q3 T4 r& |

3 j0 z; {8 h9 ~9 d8 G2 t/*$ S$ n% r+ W4 \% Q9 ?  J
*  ======== Miscellaneous Configuration ========
9 W1 _0 z' `+ L" A' c( R */
3 k. ~/ V, Q! y! U# u0 t9 V! ]$ M0 w: y$ x* u
/* set default diags mask */$ `" c& K2 ?; b" \+ C
var Diags = xdc.useModule('xdc.runtime.Diags');
2 G. l3 ]7 e$ S) R) H7 v2 dvar Defaults = xdc.useModule('xdc.runtime.Defaults');# u0 w; ]7 g  X7 c) L

9 ]$ N& r* `& ^3 ]2 {0 D; TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ F0 T  _$ E* `. S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 m) }& C, h' Z! C1 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  \4 i* H, k. ?9 x9 ~7 I8 }8 F4 Q, Y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# }6 I  N5 m9 A, K" ^( p) F5 i
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) H, m; H! Y; K( |/ W4 O, MDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 j- j; P4 j3 P1 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ n4 S, b6 f2 I: F6 I) A- [4 e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% |% _8 W/ N0 Q- w; C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 q: G& l5 a& J! s+ ~2 oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* D9 n" G6 J/ q7 C2 m3 r* Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ ~" R" Z4 z" l% F3 ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 R4 U1 ?+ I) a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- P+ l  K; r7 F- L5 O( C8 z  BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! F8 j: Y! q0 x; O- f( y1 p( N
# S4 o+ x/ F+ Y/* override diags mask for selected modules */
1 ^  W9 n6 |0 Z! V7 Q# Z4 Z& E% [xdc.useModule('xdc.runtime.Main');5 [9 h2 r" v0 [" [
Diags.setMaskMeta(
3 f) D! ?' t8 u. a7 U3 s  ?0 q    "xdc.runtime.Main",
1 J  y4 V' S. z5 N  J" s' ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: }% Y; b( M% n; V% x    Diags.RUNTIME_ON
- c- o: S$ i+ I) i& S9 z6 j);
3 u  T% w* Q/ q* k2 s, r4 O  |1 x6 k+ [. H: `
var Registry = xdc.useModule('xdc.runtime.Registry');
7 [% t: D2 @# \) B3 mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 B1 c3 S! f9 P% J/ M/ Z  q! FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ k0 F9 J/ {3 ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 C' U2 _/ ~# z2 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) g3 z6 F  n) r& N" u
+ k7 T, ^0 J, C8 c  J7 _/* create a logger instance */
& A2 K9 z2 s/ [* Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 G9 c* s8 N0 _/ b% S* s2 bvar loggerBufP = new LoggerBuf.Params();7 W% a: D4 L* s/ m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */# k% g% W, t, ?% S0 \& a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& \/ C5 C  l4 w
6 F4 {. [. z+ T9 Q/ a
var appLogger = LoggerBuf.create(loggerBufP);
8 j3 V7 |/ z  O9 S* O6 [appLogger.instance.name = "AppLog_Core1";
) c& u- t# V5 Y+ v5 v: jDefaults.common$.logger = appLogger;
+ L' G' K2 u, G8 TMemory.defaultHeapSize = 0x8192;      g0 m, F' s7 r
Idle.idleFxns[0] = "&LEDStatus";
6 s3 G, C9 x: `+ G4 d  h3 ~) QCache.initSize.l2Size = Cache.L2Size_32K;
; d, C+ g. g; j/ f2 z2 r) A& L6 r% ?7 ^" A
回复 支持 反对

使用道具 举报

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 */0 D- y+ P# ~7 E+ Y( H! V% m% V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 D% C" Y: b. E9 ~1 f
var heapMemParams = new HeapMem.Params();+ I: H! j% [+ I( {
heapMemParams.size = 0x4000;
6 `* @  R4 n% ?2 p$ x; s( C# R4 m& Y
var Memory = xdc.useModule('xdc.runtime.Memory');
* d# q8 H. ~" z$ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" s' o2 J1 u$ W% m1 B& l' x# h

4 Q( A2 W2 D1 Z7 D5 F5 g3 k我大约calloc  每次共计大小为5K*16bits,
! p/ b" ?( M0 S; ]6 m4 Z而默认配置才0x4000、需要改大。
" D0 j: U: b9 U$ t$ b
. p; \0 @2 E% q7 A" ~  b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! `3 |3 C* {. ]( ?
Program.heap = 0;: W% Y/ T% P- M
Program.argSize = 100;  /* minimum size *// u1 q. t2 i4 F- m! R* Q) q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 21:26 , Processed in 0.043144 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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