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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

% q+ w- l( h8 f3 d& r+ Q  C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 O* y8 v8 G# U& U3 p" B- s2 f, K- k

1 o) f6 Y+ g; j! @/ m; F6 @* v其他程序段。。。。。
+ `, n; i. I5 ]  [# K
; ]+ g; J# m  m1 g( J   free(x_d);
+ z9 m. K; t/ F1 w4 @! o, L- N  E. y; b: i" {- V( m
使用DSP侧单独调试功能,验证动态申请没有问题,
. J5 [& q9 D% T: P
! X9 Z4 L6 C$ f1 [4 s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( V+ f. }; b' S7 Z

, S: T: \1 O5 n! }8 i0 d6 F/ Y3 K4 Z1 c, _" |

8 Y: L+ `0 J$ l# }, X- H
7 Z6 n6 X7 T- P, i, v- C3 D
1 \  u; o! G7 D+ r4 K
8 Y* Z5 F; _* h4 V3 d; P  p* f+ K! U+ G* [4 j- Y% }2 t9 h; R. F* c
- L* P/ |7 N( n0 p! B/ G( Q

6 x3 u9 ^; g3 v4 m& C
6 D8 s8 k6 ?+ {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; G, S: Z& R+ F6 k9 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- L6 V7 p" c2 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- c1 s( H4 y2 x5 z8 l! t: q% `/ F1 X
$ S; O4 R5 e# v) L/ |# L
是不是需要在DSP.CFG中进行配置
8 j" k8 ~8 L6 F8 p1 p* f我现在的配置为2 j4 U2 _4 \4 r$ v  k  R
! e8 I; [$ I  y- i0 [8 n+ `
/*
+ r% r8 o0 W! ]9 v# H& X *  ======== Operating System Configuration ========0 I+ D4 b+ h4 ~/ ~% L- v+ K5 W
*/8 p( ~" ], k3 B, k; b& J# C4 Z) k3 x0 ^

+ ]% T% k: P6 B+ p' p7 Y! d/* no rts heap */% T5 @" P, I7 v$ I" y/ X# O
Program.heap = 0;
! p/ @5 h0 q& O0 nProgram.argSize = 100;  /* minimum size */, z1 c- e, E: M5 {' a( G2 v3 `4 V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. m( y9 G& g& x3 I* w- }5 _- \/ F" e3 U+ g/ G$ U, Y
/* create a default heap */. P; {3 r, d% Y5 B% |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, Y; o/ C8 W# S8 |1 Y: W& @
var heapMemParams = new HeapMem.Params();3 f  |: f8 w2 \" m8 Z; q+ ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ U- n, q1 L- J2 P! e
) u8 ]! H" _: t* U5 F1 u+ C* a
var Memory = xdc.useModule('xdc.runtime.Memory');
4 \8 o- z" N# ^) i8 O6 G* iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 Z( f/ b. C, |. I$ c
& F( Q( @9 M- h& P
/* configure System module */
" R  O9 @  f9 |( n* `( a1 n, X/ b7 G, _var SysMin = xdc.useModule('xdc.runtime.SysMin');
! w- S0 g" j6 R+ y( E: U, \SysMin.bufSize = 0x1000;
. @, m8 j$ O1 B- w, u/ v9 N: z9 @SysMin.flushAtExit = false;
' G" _) b' ]! H. v2 y
- O* L8 i: V. b/ I! P! y% Avar System = xdc.useModule('xdc.runtime.System');
) c( J2 k0 u  {8 S! V! jSystem.SupportProxy = SysMin;# \5 R* i; \7 U, i# y/ e3 y1 t

) d( }8 D; a0 K' Y. w/* configure SysBios to use the lower half of Timer 1 */
* T" S0 w( E1 m) B7 {" \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' M$ X8 F" G8 u, O7 }7 X2 A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! q: g  ]" h+ J0 ?, B9 oTimer.timerSettings[1].master = true;$ i: Q8 {# o0 e+ u8 g0 c, K/ Z
Timer.defaultHalf = Timer.Half_LOWER;
* \8 @6 O9 ]* C2 b9 NClock.timerId = 1;
5 g: A) u  I7 {; C) r# L
* G8 C9 Z0 G( m& b. z* X$ t( Y" N! _$ V% }8 Q. g. ]
/*
$ U% s- h) W7 u) _! Q9 w# T *  ======== Miscellaneous Configuration ========3 Y( b% |  u# x3 l+ y
*/
, G, m9 Y; L9 c3 H6 r- X) Z2 b  t
% H4 o4 L3 \5 S/* set default diags mask */, z. B& A- X8 C+ C! @! H5 J' c: H. E
var Diags = xdc.useModule('xdc.runtime.Diags');
0 D8 Y- o. v; |% C) h' tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, _0 b1 H* |) W# U! L
1 l% F2 q: P& `  t9 b8 nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 d8 Z, n1 d% RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' T" R6 F$ I7 T% A5 ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' c5 }( F7 f* k1 y3 D+ a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( Y5 l9 y( q* U' f) H4 M8 ODefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 i. G0 i! D3 Y, S5 B. i3 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 b- N" ]+ I# w" r2 m9 J+ F/ BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# u7 \% |' C& m6 [. BDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 [4 S1 C! O+ ?& s! Y( a9 L& k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. ]+ E9 U* c$ p% i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# W( L# I" b4 O5 D+ L6 ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: g& w; i. ]% m9 d3 y6 f1 V+ D  eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; u: h9 `# }' o- F( F2 W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! s" L' R1 M6 W4 P- pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. S. u/ q4 X: {" B9 d% |5 |! v1 I6 r/ _: T
/* override diags mask for selected modules */
7 E2 N0 G# h# }& K' R  _' _, ~xdc.useModule('xdc.runtime.Main');
: ~$ E& _& P. ]1 R* |3 ?$ DDiags.setMaskMeta($ X% a. L/ P7 R3 ?
    "xdc.runtime.Main",% E. A4 t0 M' P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% d+ `2 h$ s$ ~' I
    Diags.RUNTIME_ON
) `6 w2 D0 C. O7 U4 G/ w);
. o, Y- O- i5 n+ l, }
* S3 s& o! ^; F+ ^! E& G' P+ Fvar Registry = xdc.useModule('xdc.runtime.Registry');/ l- Q5 r( ~6 g) F! A9 b! h: ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  J6 V2 J- E( W0 K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* j7 n* p) n" p- p; [4 wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; L% e8 V2 r1 g3 i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! E; s6 q- i0 @, ?. i4 ^8 N0 L" P. O. o) O
/* create a logger instance */% L' i6 E; @5 ~- }+ w
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ c" P% d: u2 }; F9 L) G4 Pvar loggerBufP = new LoggerBuf.Params();1 ^! z# W) ]1 t) w* C) o$ O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. M( i& n. ?- uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 g0 t& `' E( [0 X2 v2 u& }5 i3 |( _8 Q7 x' N1 F: a0 n" F- x
var appLogger = LoggerBuf.create(loggerBufP);
" b$ Z7 ~: V6 f6 Q/ H. h9 ]# A' [appLogger.instance.name = "AppLog_Core1";1 L$ e) B7 L& z6 u' {% S! ?# I6 B
Defaults.common$.logger = appLogger;
7 Y) s2 R6 a0 [' e! r4 lMemory.defaultHeapSize = 0x8192;   
0 k) W+ @/ M: G: c* q4 WIdle.idleFxns[0] = "&LEDStatus";* J( V* P1 h- J
Cache.initSize.l2Size = Cache.L2Size_32K;( \1 g; ~3 r& Q6 b

- o/ w' `) p2 s
回复 支持 反对

使用道具 举报

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 */
& v* v  g. G: ?& X' Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% G" ~, ]/ x% a( P, t* rvar heapMemParams = new HeapMem.Params();& t7 M4 H* \$ s; ]- x8 B  ]
heapMemParams.size = 0x4000;7 E( ?# a, F2 M& N
* f1 I: d; W% l  S+ {
var Memory = xdc.useModule('xdc.runtime.Memory');5 Y4 ~4 G7 q, t+ S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- i: P6 p/ @8 I) I2 L, G/ f7 T4 M! G+ L# {
我大约calloc  每次共计大小为5K*16bits,7 e8 k/ Q. p6 H% N
而默认配置才0x4000、需要改大。" Q" Z- O8 G( m- W

5 A7 L7 {) ~- u% Z1 z% r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ M% m6 X6 J: ]9 OProgram.heap = 0;; |& B# o- w  l3 b3 i. G
Program.argSize = 100;  /* minimum size */% Z; l! r- b+ w
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-4 12:06 , Processed in 0.047403 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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