关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 [6 ]" S7 e/ }2 B4 R, P! {
5 \2 ?" c; Q0 n3 R) h. w. e4 s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, I+ K9 g! g: l3 n* Y/ z" |( q% x/ \4 m
其他程序段。。。。。. o' t4 b/ {2 G7 F8 X! n7 {, P+ t
' ]# }* l6 a4 }. s
   free(x_d);
& \) g" ^0 z5 c" i. {7 p# ?1 K- i+ n% t; H
使用DSP侧单独调试功能,验证动态申请没有问题,
: Q# c/ u' w# t, [
) u* J) h3 \( F6 T5 E8 P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 x) H* S: n( h+ @$ k  s

# U' z6 Y7 ?+ E: m# A  C& D5 m' E3 o5 ^1 |( |: Q; V
3 G+ {+ k( q/ h! _2 r' U4 k

3 r- H/ \& r5 L* u+ d
5 ]7 \6 a6 u! t
4 w! K4 `' P& k/ w: n" H. i. \2 d- q& B+ |# y4 K4 S
2 i8 c( I9 O2 j7 \6 V& j, E
3 X1 E0 o7 X9 ~9 w2 q2 F
6 w8 e& |! ?( k& l" y$ O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# Q6 ?+ y! {8 A* j$ S3 a我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ a+ q8 T. Z& T4 D. J4 D2 W! D8 ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& F2 |9 `* Q( O- D( _' v4 S
$ Q8 L9 E* _/ a/ L# Q7 M) v
是不是需要在DSP.CFG中进行配置, J  I) f2 I! ^" `; A. \
我现在的配置为3 U+ {/ {0 t  Z. P5 g- }3 |8 P

  K6 h4 R1 }; w, |4 I7 l. N/*
& n3 ~" V: O2 A0 y *  ======== Operating System Configuration ========. `2 u: v8 }# e- p8 E1 }: R0 E
*/
* g$ R3 W4 y! r  d1 n
  t+ D7 e' @) v* H% F+ d2 k3 [/* no rts heap */, J+ E. \5 ~9 J3 K
Program.heap = 0;* ]9 E; o, U5 V% \; }
Program.argSize = 100;  /* minimum size */
: Q0 M# ]( |2 d+ X& w/ JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( V7 z: U( z' `7 F3 I7 V, v3 e/ C' H% N, u' @; N5 K
/* create a default heap */
7 N" }) t) H# J  d, I! Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. c: [3 S1 b5 q; t
var heapMemParams = new HeapMem.Params();" }# Q2 H7 [+ |) r  \) n5 ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) r) j& E$ S6 }6 z: t, A
* C6 i4 ~/ p' A" U- }5 Y1 ?6 w5 d
var Memory = xdc.useModule('xdc.runtime.Memory');+ e/ a' A$ J  ], p! b4 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 g5 ]) u* r# U4 E8 `5 f- ~
$ _) H8 E  g. i/* configure System module */
! Z' C% \  p* E2 a& |) L  U' U& tvar SysMin = xdc.useModule('xdc.runtime.SysMin');( Q3 ]- S8 o0 n4 z- A  k# Q
SysMin.bufSize = 0x1000;. _9 L; U# _9 N3 g
SysMin.flushAtExit = false;# T% D1 T, o8 {

, \: j) W/ F( G0 f5 Mvar System = xdc.useModule('xdc.runtime.System');
1 N# J6 Y9 h& i. U, t5 x# b0 N0 e5 H& ?System.SupportProxy = SysMin;
- [9 Y  @: i" E8 h2 I6 t: O4 \; I7 b; `$ Q# t5 n4 I% B
/* configure SysBios to use the lower half of Timer 1 */
' B9 X  B' l- Wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 S! h9 O5 t: X, N) v! Z4 ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 \0 l- _, K3 f/ z7 h' VTimer.timerSettings[1].master = true;
/ M' X. \+ Q5 A# x" D+ HTimer.defaultHalf = Timer.Half_LOWER;+ A2 t+ |& `& l" p6 b
Clock.timerId = 1;) b  U2 V6 w* f* F1 m; u
! m' b1 _) Q" @7 z# `  i  I

* ~2 k! ~4 q6 h/*4 D) a4 l8 i0 q) K) b8 |5 `
*  ======== Miscellaneous Configuration ========1 q& T9 }/ }9 K
*/3 M, M* P% a! M. S

/ P* a5 e* s( O3 i2 N/* set default diags mask */* f& T* B! }$ c
var Diags = xdc.useModule('xdc.runtime.Diags');
, m, `6 O$ x& j. Avar Defaults = xdc.useModule('xdc.runtime.Defaults');
* |% Y% Z4 T6 |' S+ ~% g2 q; x
' K- [* ]  K5 ~9 EDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" G6 d/ M! h$ k) v* Z( BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ t) g  R, ?, `, V6 z5 V
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# i3 Y; L4 [& cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 M6 z& k: _8 R+ c, O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 j# d; _' l& ^* P1 }1 {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" `8 K* N4 H3 _* |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! h+ F7 T/ B) x+ u) |. ^( b9 t! FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 F% ], K" U9 G9 N7 g6 Q0 wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ `0 f4 x2 B5 ~
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( U' _* }. I/ h/ q: tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% ~  n( m4 J/ QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  ^- n- ]6 u) l6 i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* _2 u1 V3 z: ^; B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) Z' f% [! P2 F! j; l4 Q3 m# }# Q
0 R' _7 b, D: Z3 V/* override diags mask for selected modules */# {  J5 w8 y. l7 @6 P- @- |
xdc.useModule('xdc.runtime.Main');( p, Y1 z8 d  I$ r/ \& W
Diags.setMaskMeta(
9 F; L2 H( v+ R! k, D5 K# Q/ {    "xdc.runtime.Main",8 t( S; g, T2 ]( }0 W6 {6 W  j! t' i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) r8 V0 }- U( f- X8 y    Diags.RUNTIME_ON
$ F, N2 p1 Y% u3 T1 B4 z% x- a);
+ `+ U% ~$ ?& W, L
& T0 a% Q; l  s7 Rvar Registry = xdc.useModule('xdc.runtime.Registry');
2 q0 I7 V1 i% g. p0 v0 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 d) Y/ ]0 h- L. f2 e1 \' _- g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( u; Y* B. \1 r1 Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ l+ M; Q9 Q9 V5 x4 r+ D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 f+ E3 u1 m- S$ a( T' W3 C; a( F0 y  f% r* R, A
/* create a logger instance */* |  g8 t. i' i) Q2 O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  j- n; h3 S" W! r+ M" t
var loggerBufP = new LoggerBuf.Params();4 ?) a7 Y8 C1 @- Y5 ]& F8 Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; r1 L$ ^6 T) R6 XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% Z6 E% R. j. T4 L# g3 @- v# c
var appLogger = LoggerBuf.create(loggerBufP);
9 P, y, X& t$ z$ `2 AappLogger.instance.name = "AppLog_Core1";
" I1 O( c% [3 zDefaults.common$.logger = appLogger;" k! K% r% ]1 V" o4 y
Memory.defaultHeapSize = 0x8192;   
8 O. e2 i; O! X3 t% Y9 wIdle.idleFxns[0] = "&LEDStatus";6 }4 A6 D2 w- a
Cache.initSize.l2Size = Cache.L2Size_32K;0 I! Q7 `* f2 U9 C9 w
' ^4 H6 y: L1 N5 W9 J
回复 支持 反对

使用道具 举报

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 */
. u$ j/ W; l+ v) o. v& Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ a* ], G+ }! b, P3 e0 ?% K3 x
var heapMemParams = new HeapMem.Params();
9 h# p2 C# a4 Y( `  S, B' B8 }( KheapMemParams.size = 0x4000;/ ?* F9 t1 y& p! O2 H7 t

$ c- ]5 f! k6 Q: fvar Memory = xdc.useModule('xdc.runtime.Memory');
( U% s0 j' J9 M0 G! uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. [/ V8 K: |) e# k/ h' O9 Y
1 P6 j0 P" z+ f我大约calloc  每次共计大小为5K*16bits,
6 G* m# l5 e& u% ?7 ~) q7 Q而默认配置才0x4000、需要改大。
; U, n& ]* H/ V0 u  L$ d8 Q, q- W% H) I8 ]* k" A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' [* @- }5 x6 {. ]) i
Program.heap = 0;1 |7 _& M: _1 n1 T  t' J
Program.argSize = 100;  /* minimum size */( E0 n# f8 ~. f
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-24 17:29 , Processed in 0.042629 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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