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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

, i7 t4 R5 }+ z8 ^; j# ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ f5 {) X6 r& s% s: n1 Q! D8 K4 g1 j0 J7 _: W
其他程序段。。。。。3 }( q2 o& s; m& L. b" f% t

. Z" n4 @1 E3 g8 l" j1 z0 M   free(x_d);
2 {3 S6 n! I6 g: O0 B) F# Q
; O  N4 T- w) \% A+ O5 J9 p使用DSP侧单独调试功能,验证动态申请没有问题,* {- I# B' _1 p  l

2 F: z, w2 A" z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# L( |9 o. ?4 B9 x! @9 B1 \

- O6 |! {, u+ r2 M8 L0 E7 M
1 }4 C+ s2 c0 P, v8 K4 o3 i0 U3 N" b! D, }, \

, ^3 N& F* Y* [
: D/ v' n2 U5 ]" O+ g, j- [9 l# f0 `& s

% _" U8 G& G3 r: Z
$ i/ X2 I; y" }5 t: @( |" p7 D  J. z( n9 ~$ L4 ^

  E# a' c; u3 A- m( N& ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# `: N/ C* @# a* t5 L, d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ _, \) l( O8 e  q5 u& I/ F4 w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ F# }! ^+ q2 ^* I" i& ]
  a  Y( F% B  N  |- d' a
是不是需要在DSP.CFG中进行配置
' i. r8 V+ S7 Z+ ?' K( |3 n我现在的配置为
- V1 V5 H! I  \7 D4 @  w) S
) I% ]$ {6 P% B/*
; w) s1 V8 j8 l" l$ g- @6 V *  ======== Operating System Configuration ========
9 [3 B: p0 }2 G% X3 r1 o) Z+ b */2 }' z1 }, ^' [, y
4 p* ~8 Y. N' O7 e7 t1 E
/* no rts heap */
4 W. t, i* Y! I! w+ X: I1 }8 x# e2 }Program.heap = 0;
* H5 J. f% k' p. h; K  c1 rProgram.argSize = 100;  /* minimum size */: N( G- J, [4 m/ \" ]% z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; @6 H0 k- ?6 \! ]6 b: v, ?6 I
  Y5 J' o) X) a' J& L2 L
/* create a default heap */
; p, Y& q! j6 _6 H# e9 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  w% ?& [8 n9 O8 [! Y& G
var heapMemParams = new HeapMem.Params();! a, p! Y3 I" y! b2 T; U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ i! e" M9 x/ F1 M0 m, X4 l: `0 L# e5 i: R5 i
var Memory = xdc.useModule('xdc.runtime.Memory');2 M" m, c  T; r9 @- R  p2 I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ G2 [1 M- k+ [4 n* N. o" I

6 d1 N8 m8 t! B/* configure System module */" H1 U# M( ?) k( l
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# j& R, K* p7 A0 H! ?6 O. T0 sSysMin.bufSize = 0x1000;: a# V  h4 Z& \. {4 F
SysMin.flushAtExit = false;
* L. A# z3 ?! h
& X' ^. r- h) \7 E, {9 v+ n, pvar System = xdc.useModule('xdc.runtime.System');1 N  l* w% ?2 f% }0 f1 m6 i( a) r2 @. z
System.SupportProxy = SysMin;
+ v, A: y/ p% N; O6 _& M
5 c: ~& o4 }/ H5 s. s/* configure SysBios to use the lower half of Timer 1 */
6 v# K  L: M% m  v/ ~var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& t1 L  A0 b( F8 J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 E- F$ y$ w% s( w3 T1 w8 `3 eTimer.timerSettings[1].master = true;
8 w3 @! h# _. ]8 G( R: f, e) eTimer.defaultHalf = Timer.Half_LOWER;" E8 j3 l% ?. R+ f
Clock.timerId = 1;; O4 y8 T; I, L/ D" Y
( M' G7 r0 {$ _6 Y: J6 U% a* y& ]

1 h9 t$ x  k- |- l( e/*- m" r+ t! Z* c8 J6 G% v6 t. M
*  ======== Miscellaneous Configuration ========2 j) m, Q" `0 I/ |2 j
*/
# I- R1 f6 K" O& {( {) K! r' s6 Z  V
/* set default diags mask */
, |9 d  b2 T$ |! Z4 v9 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
7 s3 R. ?6 [1 O; D- a, qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 J! `7 K' }, K. [: _1 ?! u: x) t
$ X/ n& G- A4 O! w  PDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" `& o+ i8 S& l; w9 D+ F8 ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 g) U9 g# |. P) r) l( ]Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) j$ W6 i  i8 m  z" b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 }5 L2 `5 L1 X* JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  D- p) N9 @8 S; x- G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) h0 E! `+ ~: cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ Q3 J* f* k  d4 d- @4 A& E. f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( `  y: j- j& q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" D, M4 q. Y9 v& c
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 r, p' W2 t; `1 }8 |: x/ p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ R% a0 x) m! D9 I2 Q: L/ w; UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& h, k9 O" O2 J& D# i. uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  v' C8 {& }& }' }- ^  jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 Y' |9 c$ N+ ?0 U* Z
( A6 T" a7 `0 q8 Y& f4 |" r
/* override diags mask for selected modules */. Q# q1 M- J: w' e
xdc.useModule('xdc.runtime.Main');, @8 N6 s1 i# \; _: i
Diags.setMaskMeta(2 I/ v5 [' c9 ?% f; ~2 k1 ]
    "xdc.runtime.Main",. q+ P" J4 o% O& t; W$ O( L9 F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ N8 S0 v2 S: H) ^5 C) j# h& W
    Diags.RUNTIME_ON
# u' N+ K6 g9 V8 H" a. w);# x& @4 x, M' C. N  D. g( m
& L" A5 n: J( t. O! Y+ s3 p
var Registry = xdc.useModule('xdc.runtime.Registry');
8 r) r! T1 c3 ?. m1 fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" V1 A9 L: n% A- J( ]+ H- WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& k6 v" V5 L% i/ g+ C) Q  URegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( B  F. O1 u2 h- N7 Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# O$ i0 V8 o- N6 j% ^. X: n) a$ d% g6 ?$ z$ F2 z+ k# d0 l7 C
/* create a logger instance */# }' _1 l7 ^6 q8 _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. \+ i4 x# E  x. v9 j5 ^
var loggerBufP = new LoggerBuf.Params();7 J( @+ o1 m3 x& W8 U  z' n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 B. j; \) y; S2 u
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  i" l0 H! m, g; z' v$ W
0 G8 |) Y/ Q0 n; C* A* c
var appLogger = LoggerBuf.create(loggerBufP);
4 x6 V0 A( g8 O* h, \- j0 \appLogger.instance.name = "AppLog_Core1";
9 K. d9 m/ n# zDefaults.common$.logger = appLogger;
# [# w7 f: Y. i$ PMemory.defaultHeapSize = 0x8192;    : j5 y1 s2 n0 c/ J# A
Idle.idleFxns[0] = "&LEDStatus";' y- K" x! Q9 p
Cache.initSize.l2Size = Cache.L2Size_32K;
) B7 x* X9 r: v. q# _/ |5 S) F* f( i3 ?
回复 支持 反对

使用道具 举报

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 */
2 R: d5 x9 {( t! r+ F: C! A2 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% ]5 E) [2 Z3 v  @8 [5 a# h, o
var heapMemParams = new HeapMem.Params();  q7 l$ E+ t1 V- y$ F1 A* V' g
heapMemParams.size = 0x4000;. t; T# N) [$ m2 e' d& M# p- B

, e3 M) i5 m, u& G# l/ [7 kvar Memory = xdc.useModule('xdc.runtime.Memory');' p4 F5 x8 A) s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ V+ Q+ J$ j* n) U, b, v# }5 F8 z! N" W3 U) g
我大约calloc  每次共计大小为5K*16bits,; S2 d" H$ }! B1 s
而默认配置才0x4000、需要改大。
( c# a6 o, d) P) A; _* K  w/ w' Q; ~% ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, X; x5 e& L/ }: j- q/ s8 f, [4 N
Program.heap = 0;
+ a: v. g# Q8 e5 FProgram.argSize = 100;  /* minimum size */
( q& V  v- \% yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 11:38 , Processed in 0.045986 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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