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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* u% p  p/ J' c
* i( ~5 {/ z+ t  r! ~$ C2 a  N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# x$ P: A  A* u. E) u/ P
6 b3 T+ U0 ^; S: k; F5 u. d
其他程序段。。。。。% e0 z7 S( e' A3 x! L! j0 q& |
  b5 C" ~2 n; A2 Z& \
   free(x_d);. N8 \1 x, ^3 N
* v* \% z4 f; o: u0 z. o
使用DSP侧单独调试功能,验证动态申请没有问题,
) U- H# C' _  m6 R8 ~5 C+ d/ n; E+ m1 ?) u" P# s+ d8 Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  n3 J7 y  W' |/ d- I+ G
2 ^- K( f1 M6 Q: P

  H6 m, n2 R% C3 t( ~3 c, M" {7 j- t

5 |7 n: @( E/ ?. B/ J. O
# R0 s- h* a2 P, A( ?+ D+ T
# j& g0 h* i3 s" A5 e+ ~/ V( y1 x$ d: [9 u+ E

' C3 R% v% ^# O4 O8 w2 i! w' O7 }) c
# {5 R1 n: e7 _8 U1 D( y" m9 ]5 d6 @' H; Q# ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 W. U6 N8 W5 U  ^3 `; D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( r, ~: [" S! O* D0 e& \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& O1 L( v3 F' X7 x+ s1 ?( @7 c
( o% @: m" |* O7 d
是不是需要在DSP.CFG中进行配置
/ I2 A+ j3 V$ ~: }# w; K我现在的配置为1 c4 F5 K4 X) i5 d& W+ e2 i
# z1 _* D3 @. j& a
/*4 x% k* H' w1 J  }
*  ======== Operating System Configuration ========7 h% i  K& Y( D4 Z. `# P! S3 d- Y
*/2 `2 ~; o# Z: X, k8 a+ ^& F6 o

* {% e& u: o# m2 ~4 C/* no rts heap */1 k& P1 Y- O9 c1 w: T; O
Program.heap = 0;0 ~5 y7 _% O& j3 s2 e9 b
Program.argSize = 100;  /* minimum size */2 C! W4 T6 g/ L1 D* [: V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 X5 V$ N% P% u, N4 B7 k
) z, v* Z1 H0 n* ^/ e% G/* create a default heap */, ^9 Q$ I- w+ H" c' M3 @, U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 e9 z5 }. _. C9 H& }var heapMemParams = new HeapMem.Params();
* @% _4 I) H+ JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% B! B' b: y7 `7 u7 J. y4 f6 b  R2 F) |6 p1 u
var Memory = xdc.useModule('xdc.runtime.Memory');
" h+ a4 l5 G" Z) w0 `+ Y5 c4 H! WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% a$ O3 t% N; A1 }1 H$ I# u

5 I8 O+ @6 D, [  r) W/* configure System module */
! A2 ]8 x3 J* F3 b: F; H$ ]var SysMin = xdc.useModule('xdc.runtime.SysMin');) `7 g5 i& b. X4 O& @2 d
SysMin.bufSize = 0x1000;) b. O( F; e+ L. @. o
SysMin.flushAtExit = false;
, g/ S" j" @1 m, ^% B1 v7 [( R
# I( j7 e' p2 W( y1 S6 U, Dvar System = xdc.useModule('xdc.runtime.System');2 `& d4 ~; K- I+ G$ S
System.SupportProxy = SysMin;
0 c3 [) `' }. }8 J, K2 i; _. j5 Z* ~/ M, R) }% d9 W4 k  [4 n0 {
/* configure SysBios to use the lower half of Timer 1 *// j) M% |+ l; `" X1 V2 S% e0 _
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* T1 ]# {* V0 P, lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( o; T9 r4 L! w8 ^
Timer.timerSettings[1].master = true;$ P7 A0 i9 }( d0 z
Timer.defaultHalf = Timer.Half_LOWER;+ x; n: ^2 ]2 b% Y# E! n. O" D
Clock.timerId = 1;+ W  s8 L! i6 w* D5 p% a

) s: v6 ~2 \1 E1 z5 g
2 Y1 K6 t) @/ p4 }9 h* @* `) p2 g/*
9 Y2 j" X( }. Z( u  P* J *  ======== Miscellaneous Configuration ========9 O  o" d( z0 W7 k% o  a4 Q
*/. v/ Y: O' j' B. `/ y

+ R& K9 J. M' R. k( v) i8 L/* set default diags mask */
7 N9 n( J! O; w" h  Ovar Diags = xdc.useModule('xdc.runtime.Diags');
3 O9 f- e, W8 m' I" ?var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ X( ]  V$ {3 B, k, A) i* H, R6 }2 I" u" l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! V  w, w, W9 u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ y4 [; S6 Q; s  }& ]& K9 a5 f0 DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 J4 L0 B1 n6 ?) ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, p- _: }! e- Z) S6 u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ q3 }8 ~: v5 O; `( k8 S4 w1 p) F" cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  J: b% L& c6 u7 l1 ^; ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 t6 q1 L7 G/ e# {2 ?3 uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, p5 r9 L, u0 S$ D% C% QDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  O8 v7 F( @, F9 \' BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 T2 M1 z! W" kDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 s9 z& z: f5 @# `: e8 |) m) yDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: B) v* z! t/ }9 o0 n9 i8 t5 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' E" q' T# o8 s' e% W  ~+ u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 O) k2 Z. y2 `7 m
' T, v& Q" A* {( A/* override diags mask for selected modules */
- \1 O" X' f* m. d" [) [: M: Axdc.useModule('xdc.runtime.Main');
- L4 V6 l  i/ j' bDiags.setMaskMeta(
# L. C9 z! Q# c$ [7 T    "xdc.runtime.Main",
, D3 a7 q8 A% ~  t3 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 |/ U9 @/ M& P( H! v# F+ N- n9 a
    Diags.RUNTIME_ON
4 i( X8 g+ e, _0 a* @);
9 e. K+ p3 H9 A# f$ L) {6 c5 e
  I8 {$ B" T2 J* F" S% `2 vvar Registry = xdc.useModule('xdc.runtime.Registry');/ Y9 c' k6 q+ P7 }( \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 v. g: R, g- c2 s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 Y) I' w: l+ M* c- B+ P: dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" V! \! f& x" X7 @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 X& l! `& j3 Z# M$ N* G

3 H% z; v# I4 e5 l/* create a logger instance */! y( x0 x: i7 y+ o% w1 O0 O" O/ P
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 G- F" ]% y& G) l  V
var loggerBufP = new LoggerBuf.Params();0 Q& v5 v+ A& s: p
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" m1 r, J6 y5 O; w" b# H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% B; D$ E. t7 c
4 |: _- L* K  \: U8 B9 R3 Mvar appLogger = LoggerBuf.create(loggerBufP);  U6 u( ]1 _+ w: a
appLogger.instance.name = "AppLog_Core1";
) m0 z9 B- j% f0 R; P$ \Defaults.common$.logger = appLogger;6 {1 J* U2 ?; h! @7 g" U
Memory.defaultHeapSize = 0x8192;   
* e5 K0 \: i. x, d- @Idle.idleFxns[0] = "&LEDStatus";' w6 A% t: g) E$ Z
Cache.initSize.l2Size = Cache.L2Size_32K;
# B1 n8 _) K" [. w% ^5 R3 M1 ~* V* o& K" `9 ?! X/ G
回复 支持 反对

使用道具 举报

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 */
+ F. k5 c( K- o) ?) t6 J. I, Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 g. T6 k7 Q4 V$ Y% T7 M" P7 K
var heapMemParams = new HeapMem.Params();+ r8 u" P; W% \0 z; n
heapMemParams.size = 0x4000;, n0 \8 R! e& R

+ w6 Q# O; B: d, e2 C1 \var Memory = xdc.useModule('xdc.runtime.Memory');8 ^1 H( K$ R* ?! Y( m+ V* v+ K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 @' N6 E% W/ o& g8 x0 t2 y* j& q9 R( T$ q- x
我大约calloc  每次共计大小为5K*16bits,
9 T$ z$ h# M8 L而默认配置才0x4000、需要改大。  N6 ]& d" z2 a. t4 f1 n( e
: L9 `' H* n6 C0 N  U8 {8 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 X, j- z7 E. z, g) k) RProgram.heap = 0;) l7 d# U* G& I+ }- v( F
Program.argSize = 100;  /* minimum size */
6 c& i! J9 P9 C; N( F, I9 }( WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 05:40 , Processed in 0.040890 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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