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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 f4 s3 i/ @0 }' T; y% Q) m0 _: F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% w5 I' o7 l: ^7 I: _8 A8 z8 C9 s

% p' D& ?) G3 N其他程序段。。。。。
$ M+ e# z' J. z
! S. ~% [: P. Y6 H  c. J7 \- e   free(x_d);3 }; V6 O. T! x. }" C) Y
7 ~' J: D% }; X& T# ^
使用DSP侧单独调试功能,验证动态申请没有问题,
" e! _: n6 _6 N0 a7 U" h3 i0 C8 X, o* O1 u( v; |1 ~5 O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 C- j% ]4 b' ^. u* c: H
  n# {( x3 w% o( l6 M$ r) Z

+ V: C  x( J# ~% n( p
2 h) l' w0 A2 J6 v6 J2 d3 X, a/ e$ P

& q8 @! J" G" C+ S0 q$ P0 V- O$ S! y) h' [" n& \
4 i- W4 y+ X, z- r8 o4 n1 ]
0 s1 |* N- u0 S
6 L/ U) T2 O; v$ v0 e

0 R2 _+ U# O: S/ ^1 ]: n
分享到:  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 */
) d: n$ O* Z/ X* H7 f0 u% v1 GProgram.heap = 0;0 b6 |2 r* t) L. B+ n+ g
Program.argSize = 100;  /* minimum size */
0 L2 ?- ^, x* \! ~1 r, z5 GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( _) }) Y: o1 I- G/ Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& G' g1 P! `2 r# e! p. z
var heapMemParams = new HeapMem.Params();
9 N: m# e- U" q  f# ?8 d: W( GheapMemParams.size = 0x4000;
* _4 `- c& h$ N: Y5 B2 V# K
9 M* \" ~/ R# w! \var Memory = xdc.useModule('xdc.runtime.Memory');, a+ f$ q8 I& |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! a; c) P+ h+ b; ~& m& G- T3 e6 _$ b7 F+ a1 |/ I! @
我大约calloc  每次共计大小为5K*16bits,
  k8 v# r$ G5 H# {9 n而默认配置才0x4000、需要改大。3 W; B& [  ?/ j

' |$ d7 A# q) |* ~1 l4 Y* L
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 ?2 C& n, M' f# o- E. O* \, G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- W8 |$ ^+ ?' @' u& j0 A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( l5 j/ `2 B5 t3 @3 ^  W

; f( g( T. H* u) Z! P! Y) C* R, @0 S是不是需要在DSP.CFG中进行配置, ^: Q" J) K: ^; {# T3 i
我现在的配置为
( Z) x, M0 v1 W- _, D% y3 S' [" ^
/*7 x2 T& \9 }" w  p0 X
*  ======== Operating System Configuration ========2 ]3 g5 Z  [; K  ^
*/
# K4 s5 r5 o, Q4 A7 ~! D
5 R  H$ R. [2 W/* no rts heap */
& ?4 E" Y  K! g. W. k) Y: ZProgram.heap = 0;7 L+ [& N+ {, e$ p
Program.argSize = 100;  /* minimum size */: `! s5 N8 \) f; |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# _2 ~, `8 ^" ^3 @- D
+ h5 @1 g- d$ [  x/* create a default heap */
& L; T) Y' ?- G( t2 ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ o5 Y! j4 n& T% g$ y" v* N
var heapMemParams = new HeapMem.Params();
3 ~5 V7 W, t) E" ZheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 c" f  Z. j" h+ O: U6 A' x

2 {% j1 y/ G7 q5 \
var Memory = xdc.useModule('xdc.runtime.Memory');
2 E! \# \6 O' |+ xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% s- S6 t9 _" E9 c- b

& @% ~+ Z( `. j7 B/* configure System module */6 O- c& G7 \" P3 \. n. k
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 L4 E5 O' N* _2 ~8 PSysMin.bufSize = 0x1000;4 Q" f9 }7 s3 B
SysMin.flushAtExit = false;
2 Y( J9 `  N* F: q2 u9 g) }( |% F
var System = xdc.useModule('xdc.runtime.System');) [* d) p) H! q2 L. a8 B
System.SupportProxy = SysMin;/ B% o; x. G5 E: j- T) B+ Y# h" D

3 H4 [0 I% w6 e  V: s/* configure SysBios to use the lower half of Timer 1 */1 I, Y$ a. |, [) a2 V
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. A9 L7 s; e9 i( c1 h! W) f+ Y: ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" d8 b3 Q' Y* P* n- E3 f$ \
Timer.timerSettings[1].master = true;1 e! |! h) Q; v5 p& y
Timer.defaultHalf = Timer.Half_LOWER;# _+ p$ h2 Y* _, ~
Clock.timerId = 1;$ P) |2 }( S3 |; S1 j$ M2 d, {

! c* n# k! b. }% r
& D6 N! V; p, B8 _+ E* \/*
8 ?- m9 h5 T& d  {% ?$ m! z *  ======== Miscellaneous Configuration ========* u" \8 ~: O9 ]" E
*/
# E( X  L6 M$ M+ M: v
$ {( `( a' h. K4 {7 S7 T/* set default diags mask */
5 j5 _1 e- u6 L0 [/ `0 Lvar Diags = xdc.useModule('xdc.runtime.Diags');; v( _* [5 J! t2 r  H1 z
var Defaults = xdc.useModule('xdc.runtime.Defaults');- c5 c7 ]2 O' Z' n: G, S! i, D9 H9 r
. ?* k3 G% U; u+ I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 }6 S9 q1 S$ W3 _/ |. PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: G2 e4 O2 ^0 `1 ^: o: a8 D+ c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& w. D3 r& z' u$ ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' f3 M! J& ^7 C1 m4 n$ D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 b% }! q1 m) nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' x! z  g0 [7 z  y$ ~0 M1 r# R( yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 A/ {' W/ _* ?5 y* L0 j% p* Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 q( T! B" v3 W7 m* B& h7 IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, N% X' L/ `5 v/ YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! a9 r% x8 o! K+ V% XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 [" m, t1 g) U' u# s# ?: x- _: CDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  T2 b. W4 e" {" ]: {- A% MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( G6 ^. e, }! K/ g4 p( bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 Q9 Q, i- O4 {8 R% r- D
! q* ^' r+ \. j+ S! L0 j0 K- M
/* override diags mask for selected modules */3 H2 w' B2 E. j% e7 N+ x! ?
xdc.useModule('xdc.runtime.Main');4 u( l7 T* c0 K: A% j; |
Diags.setMaskMeta(
3 x5 O1 ]3 W; H" q    "xdc.runtime.Main",
  Q# ^0 V/ h3 P$ S' {* ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,. z! ]. E. b) Q, Q* y$ P1 N: J. O6 d
    Diags.RUNTIME_ON" n6 [+ ?  O/ P2 ~  A$ @
);
8 y8 g6 B( A" h
+ H4 b$ e. U: X1 fvar Registry = xdc.useModule('xdc.runtime.Registry');# s. G" r+ A- K( d4 J, E) W. Z6 Z. |# ~
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 O( \: j, y* k% B1 v2 `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" F6 ~5 K6 ^4 j7 I5 B" }, g5 V% t' ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: u5 C! a2 _7 i% @1 GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# B. J6 M% p  u4 q. m' _! D
- D/ ?3 b  z5 t, i/* create a logger instance */
6 x; B, n% S: A, G/ d7 G( ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 |5 V: }$ C. F. V4 l3 mvar loggerBufP = new LoggerBuf.Params();
, N8 `- V) L; ]9 vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 C$ v# K5 A( I, PloggerBufP.bufType = LoggerBuf.BufType_FIXED;
) }+ c9 Q6 f% e7 M. O+ \' r+ t8 C  h# z: @- |2 p
var appLogger = LoggerBuf.create(loggerBufP);
5 y+ v" G) S5 ~3 fappLogger.instance.name = "AppLog_Core1";3 J( {+ W* Y  Q# ^$ q6 m' B' S
Defaults.common$.logger = appLogger;' F, n) w. ^6 e+ _/ ^. y& z" s
Memory.defaultHeapSize = 0x8192;   
5 r/ b. T! e" bIdle.idleFxns[0] = "&LEDStatus";; ^; p" a! o" u) s
Cache.initSize.l2Size = Cache.L2Size_32K;5 l% O$ Y6 t, ]" K( N$ J7 R* C

3 c3 L; N( h. F- }1 C- ]6 Y
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-5 08:06 , Processed in 0.042665 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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