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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ V9 o. G; e  ?* p" P6 `

8 _& E' j- e3 ]8 a  `( e/ h  ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 \8 a& \4 G7 k3 Z( s- p1 i/ s0 W# F. T
其他程序段。。。。。
& [. x% Q) j8 r ' Y' \6 V0 r( ?/ A% t( o, H
   free(x_d);; w8 s' j9 Q" f; u

5 S/ B' S1 i! h( L4 R7 c使用DSP侧单独调试功能,验证动态申请没有问题,0 J1 ~( q( Q" j; y

9 ]3 b: L# `/ j; P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 W+ s3 U% X. N. s1 U
, p7 q  T' m2 L* D( s
" B2 T% I  r. m& F1 A: d% q
$ O' T  ?% v1 ]6 U1 O8 [

9 O1 d1 n1 U  A8 `! E  B
2 h1 V0 A: E* {" y; z- \, z# }! D5 b4 ~

3 e9 t: D4 s: A5 v, }4 j9 r1 i% `  @7 W; k4 \$ ^
) \2 E) p! }# f6 v

6 H- c) D4 }: _1 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  |; i5 v% j( l, P8 n/ o* G# P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: H/ L3 c' n) G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 |2 J9 }2 v5 F, b/ J" h
2 l8 U5 h) X% R+ f* C# g. U
是不是需要在DSP.CFG中进行配置
- m4 E% E" _/ j5 G) F我现在的配置为7 U1 q9 y- B2 M0 E0 S
5 g' Q7 F( x# c* z& f' C0 h5 C2 `
/*
! B) ^* ^. D  O) w *  ======== Operating System Configuration ========& i; Z; P  C! i# [) I/ R7 E( Y8 F
*/
4 y- }5 [1 G9 c4 p1 t! Y' A& f2 ^$ u" z% Q
/* no rts heap */% P# ?% S/ R4 ], I! f" D& E
Program.heap = 0;
' ~5 n+ Z) m; e4 Q: W+ w" m, _# \Program.argSize = 100;  /* minimum size */
& M& Q. q/ m4 h7 @. ?  @) KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 ?5 H. H* j! G4 c2 }" p
+ r- {/ X  Y$ X1 f, {
/* create a default heap */
+ B1 Z9 h) M% {( B# \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& W: G9 ]* M, N/ `var heapMemParams = new HeapMem.Params();
3 }* z3 C' a( i* Y$ E4 M: ~) h& iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 d7 m/ n3 ^, b/ ]$ [+ B' \# N$ ~% [" w9 U: c9 F- a
var Memory = xdc.useModule('xdc.runtime.Memory');
* j0 Q' x! a/ A/ H$ XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& G% A$ ^9 ~8 J* x0 Y: c6 A0 r% G9 i1 o* j5 ]
/* configure System module */3 Z) N4 n' l/ r' Z1 p
var SysMin = xdc.useModule('xdc.runtime.SysMin');- l/ O. b4 }( |9 R
SysMin.bufSize = 0x1000;
. w8 b  I  D8 K" n! YSysMin.flushAtExit = false;
9 R( s- m( }' E. r) C; j& [* `4 f+ u- B  f4 q$ v
var System = xdc.useModule('xdc.runtime.System');( q' j2 D+ z# v% a1 ?* a+ v  p$ s
System.SupportProxy = SysMin;
! b9 b0 x7 r1 Q$ M6 P
! I) L7 O" }% F" X' A/* configure SysBios to use the lower half of Timer 1 */
5 v% c$ N1 D; |/ Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' J4 B9 `  S! ?7 J+ |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. `% z' b" Q. s: bTimer.timerSettings[1].master = true;
3 y  n/ M' p% s  l" L: q) gTimer.defaultHalf = Timer.Half_LOWER;
) l: n9 ~+ u/ o, V9 p  }Clock.timerId = 1;& D8 X8 I$ ?, k* Q' M& m" c( {

3 B- w' [4 s" z% J$ z" I7 `# {% ?$ s2 Q; E5 q+ u. f1 Z' j. `
/*
3 \5 E. d; U9 ~2 }2 J' Z# S *  ======== Miscellaneous Configuration ========
' ^+ P" _+ N% I8 M$ e: c8 [5 O */
5 J7 i' J$ P& E5 R/ ^. p$ g
0 G: P' w, d0 w# L/ w/* set default diags mask */) f' p3 T; H/ }8 B, P
var Diags = xdc.useModule('xdc.runtime.Diags');
/ W. u+ h6 q  s6 P+ B: K% ^0 Hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, y+ F7 J" u4 ]& W% r0 ^- h
8 V, Z8 |$ m+ E: V" z/ w3 ?% rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 t; c8 o6 S- J2 J$ n' ^8 l' r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 v; N2 [3 m; a2 ^6 d# E; yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 G1 U, ~) _/ z3 r! @# z+ }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 W6 r8 M, i. Q* L+ C$ L1 _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 [) N3 J: [* H! f( D4 JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  p; a5 v! q0 S; u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 k; I' z; g9 i- w& C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 t: J  g3 t! \1 _- TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 p: i+ F  o" c" m' u; V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: ^& v; f# x& K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( h8 @2 X- h) e& |* w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! V( C& S+ U, c8 s9 w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 R9 b6 v4 R+ _) H1 F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' b, g1 P0 M$ u  F5 m
3 {* p' m% e: T& D, |+ d  k# |/* override diags mask for selected modules */! b3 V% v2 }( v4 R9 W5 N1 B
xdc.useModule('xdc.runtime.Main');; v0 j: t/ K" X5 ?
Diags.setMaskMeta(
3 I4 Z7 D/ _. H5 S  m    "xdc.runtime.Main",
. |# m: Q3 M* ?5 J, n. S    Diags.ENTRY | Diags.EXIT | Diags.INFO,* `) j- \/ S  p' D# q$ v
    Diags.RUNTIME_ON4 w" i+ {# z  n2 H. v
);
# s* L. y6 d2 @
% r% I+ r& M) t/ a* T# ~6 G! Yvar Registry = xdc.useModule('xdc.runtime.Registry');
* `! H! W3 S$ K4 Y0 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& t: x" `% q" L7 y, r5 [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) @1 H6 E/ @6 L0 ~# {$ jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* J, C% y  a6 L6 i2 }: K/ T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) j$ T2 p6 @6 y# P; ^5 G& a! O
0 v( ]( U/ H3 u2 i/* create a logger instance */, _; |0 x& M/ J& i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; d% _! I: n0 h' K
var loggerBufP = new LoggerBuf.Params();/ ~0 o3 y0 L5 e. {4 Q$ S8 K
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* f* c8 q& v/ x0 t& q2 E# ?0 _( p. p
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, s5 }% a8 S+ a, e" x. G
8 F1 I, i- ]$ o  S% ?var appLogger = LoggerBuf.create(loggerBufP);7 U! G7 h, x$ ?9 q8 d
appLogger.instance.name = "AppLog_Core1";3 u1 i3 G( a% k* K* @2 w
Defaults.common$.logger = appLogger;
* O9 ^( G, @& E9 a; M8 @Memory.defaultHeapSize = 0x8192;   
, m! C7 ]$ V9 e/ m- [4 FIdle.idleFxns[0] = "&LEDStatus";& O& H  @* H9 u$ v
Cache.initSize.l2Size = Cache.L2Size_32K;$ u0 _5 A* y% N  y% s6 L
% A6 C* ?& V4 u! L  ~
回复 支持 反对

使用道具 举报

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 */4 C: L1 X4 m0 k  m" j5 m% j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% ]% |6 e3 n8 J- H1 Ivar heapMemParams = new HeapMem.Params();
& ~$ w9 p$ \$ T  MheapMemParams.size = 0x4000;
) W9 u4 R& Z' O) _* P* u9 t: ^! F
+ v2 L( o  Q) m% l4 C5 @9 }var Memory = xdc.useModule('xdc.runtime.Memory');! \, o2 X! X" g+ c9 R" Z- S; y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 L( @3 w9 \* ~" ]
9 @8 ^7 }! Q& b8 P3 e
我大约calloc  每次共计大小为5K*16bits,2 F, W' R6 p9 o6 {5 A: X. M! x( G
而默认配置才0x4000、需要改大。% b. R* C1 d' D
9 M; [7 {2 N/ t* H9 {4 j. J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- R, m8 _" m; Z5 |! aProgram.heap = 0;
% o, W4 c; U/ f. b  w* gProgram.argSize = 100;  /* minimum size */- T+ t' K4 J- M" X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-9 00:33 , Processed in 0.043344 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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