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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 T, M2 A% C+ q5 E) L/ K% `
/ ^+ N; ]' ?; v: P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: @7 Z( k4 T* h+ m. Y- I
' p% v% v3 v9 z. R* s4 Y# h+ h其他程序段。。。。。/ O, @( B8 [' G2 u1 W: K
! m' _  _" Z. c) O$ {
   free(x_d);
& R" R2 M+ \/ a; w( Y1 {/ J8 v9 _5 W
# R: u+ e( L$ ]( D6 c使用DSP侧单独调试功能,验证动态申请没有问题,
4 i: Q. }' ?( X& O- k! d9 O( |7 K$ [3 F5 d$ g$ W! D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& w+ _: X1 q- s6 [2 M) {

' X/ w" @% X1 H/ W% r
4 \* u, U2 i) E' X. m  {) C6 H
5 g# G: s( x5 F. x! a9 ^, n! y. v( R5 x/ B3 R. R

+ f- c2 U1 ]! c7 k) x0 q7 i% Q( N
0 d- c) h& a5 ^6 s# [3 H: h
, c4 ?7 O8 `8 g2 Q  S1 Q
# @8 n7 N  T" T: f* }  t$ U
9 ]  z3 f) `4 x; b- K
, t5 ~9 Z/ L7 c8 j$ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( G. A# Y, G  ?) _7 G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, I8 F5 H8 F# ]( F! y9 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# C2 A$ T  T: r0 c/ g
% W" ?% y# Q1 t1 Z' D
是不是需要在DSP.CFG中进行配置  x( ]; k) M  p1 k
我现在的配置为2 ~$ V( \6 m  I/ V
. V. X4 N/ I3 u2 M! y  `4 g5 @
/*- A! l; J% L+ r( p" H; I
*  ======== Operating System Configuration ========
3 f! C" r: r4 N4 c* o( Y */
" U+ F  R5 I: V0 N0 z1 p8 e5 I7 p- t8 [7 Y
/* no rts heap */
3 [- O; c9 G  gProgram.heap = 0;3 P: `) U6 l3 _1 j
Program.argSize = 100;  /* minimum size */( j2 l& U* O8 S- C1 T) z, k
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 a; m* f6 Z! j7 r3 Y) v
; W8 l9 j) [! J# y: l/* create a default heap */4 X8 E/ |9 S# r; W0 i4 F7 K9 X! h, P/ B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 y4 ?6 q) @; n
var heapMemParams = new HeapMem.Params();
, D0 _+ @- ^, w+ M7 X: i- sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, J2 D6 |9 N) u# Z8 |' `& D) Z3 ]6 b5 O
var Memory = xdc.useModule('xdc.runtime.Memory');
/ A/ j8 L. @; U- W# Q! O% ^1 E, pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 w4 w& Y9 z0 l/ t" s

4 O  S9 }* G! K/* configure System module */
, c+ l( `( a& O& Y2 _9 i: w8 I5 t! Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- \4 d- a; O# p6 HSysMin.bufSize = 0x1000;  ]1 \: L7 H% a) E; p7 T" S/ ?
SysMin.flushAtExit = false;
* l, `$ |" J8 B. s0 r5 u7 P
# Z! g& v' @$ i  `8 Pvar System = xdc.useModule('xdc.runtime.System');
. n) S+ s% k; H2 bSystem.SupportProxy = SysMin;
& J2 g& x0 N8 s5 o) l. ^: a, A+ O" D# ?; Y$ @2 z6 M( M
/* configure SysBios to use the lower half of Timer 1 */
. k( d" p( h. X) b: B* Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ S0 f2 k$ v# }8 L" Jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ x. A9 L8 j; n) _6 h6 C- L
Timer.timerSettings[1].master = true;
# a8 N6 |. O1 @( m. {Timer.defaultHalf = Timer.Half_LOWER;/ Q, V. P, }) m8 V! d
Clock.timerId = 1;
$ H$ B, \) \' l5 o+ W' Y8 {- q+ P+ @6 J
! W. G6 M5 y1 T+ t. R
/*
0 _( |+ r- m/ _! W *  ======== Miscellaneous Configuration ========/ n: D3 K! E' V% B% y' r
*/) y/ q5 V. J3 n7 q

% T# X  o" ?0 u& ~3 z/ p: r/* set default diags mask */( ^, Z+ O/ o- d7 r1 e1 \6 C
var Diags = xdc.useModule('xdc.runtime.Diags');5 E" s  q4 H1 Z5 u1 O! |
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' H4 `$ S# p& i7 Y) t  o2 x* Q
! B( P, T. ~3 R( E$ \- e+ oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* n3 _% @) C. ?. P4 WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 i# x3 [2 I- x5 U/ B9 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 H. G1 R2 g* {! V" b: F1 _1 ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& X0 C" r5 z  K( j- n# L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! Z8 F) W. `5 A6 q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& Y/ q8 c, _* ?+ I$ d4 }% {9 YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 ^* L7 B: ~- k
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, [% k2 o. i+ `. |Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" g8 ~  g5 v( w- eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% k. C5 \" X, b& M7 ^: ~! H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 ?6 \5 z* i) u$ R/ O) I* o  o& KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& r$ G' z' |" z! i! ^) C8 w5 b6 p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- A. P9 R7 A( ?8 a+ l# r7 @+ ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: D5 S4 z  q  j+ J' M3 W9 R% S

: c# p0 o. T. N" @/ O# }- ?/* override diags mask for selected modules */
# S7 P7 F' k& @; xxdc.useModule('xdc.runtime.Main');
* X0 u- R8 K% T2 h! D0 L% {& YDiags.setMaskMeta(! u& e& S( h* d  g
    "xdc.runtime.Main",
. _7 w- f# w0 h( i    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 P% Y' u8 g2 S5 o7 y4 u
    Diags.RUNTIME_ON6 n. K( S5 z6 x
);
. a* L5 K6 G  G% P
. V9 B: s# W" J, lvar Registry = xdc.useModule('xdc.runtime.Registry');0 Q: l- C" G" D& I# l6 C; o3 a. b. R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 y# `+ @0 \  [. {3 z) }: I" _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 w1 c- }5 F$ {! z# }; J
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( U4 k" d( n" r& RRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ o2 n4 m/ I, D0 J3 \/ X$ i" s

7 C" U) i7 f1 `6 R/* create a logger instance */2 W- Q6 {  z) b$ M; Z7 H
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 w% d( {: D+ F& M% E% U( H& Wvar loggerBufP = new LoggerBuf.Params();: H6 G* h) |5 ]4 M7 G' i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ d% g  [, b) N! G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 L$ w/ \$ v4 F! d. o' c5 E7 R& x
7 @  v, X2 j- i" L, D$ @5 O' evar appLogger = LoggerBuf.create(loggerBufP);
9 Z0 X0 r! h( q  ~5 g, DappLogger.instance.name = "AppLog_Core1";
# E; A+ l; N% B4 {( x& ~Defaults.common$.logger = appLogger;
  u; ~! V2 S; H6 G4 G- AMemory.defaultHeapSize = 0x8192;   
4 l( T* A" [7 q* QIdle.idleFxns[0] = "&LEDStatus";* c% w* }. c* k4 j: ?
Cache.initSize.l2Size = Cache.L2Size_32K;
. d% _4 o2 H9 R# L! H4 p7 u( Q
9 a; S: ^+ o$ {
回复 支持 反对

使用道具 举报

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 w' c( R9 Z0 o% @/ I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: m# S3 M  i( c& p( {. L5 Mvar heapMemParams = new HeapMem.Params();) Q6 K! O" x9 u! y% F! E
heapMemParams.size = 0x4000;
) j. D- D7 ]8 g8 s
' S0 x# y0 s* kvar Memory = xdc.useModule('xdc.runtime.Memory');  i4 d) y* M& m" E' W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) z0 I9 c  U, e( ], u8 Z+ g# M- u6 b9 B4 o$ m/ X
我大约calloc  每次共计大小为5K*16bits,- M4 l5 N/ C/ B  I- y+ e9 m
而默认配置才0x4000、需要改大。2 ?3 X" `# l- N1 ?( j( O. k

+ X; O8 V0 p  Y* d5 T3 i7 s: P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ n. X% o: J9 N0 |( MProgram.heap = 0;
5 U9 E" x* }3 i+ m9 L% O( R9 J) c' WProgram.argSize = 100;  /* minimum size */7 W; V+ ?0 j) L7 Q! x# Y6 l) V; d  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-2-17 08:15 , Processed in 0.047411 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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