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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) ^+ \* ~4 [6 h# h
8 o8 h4 |$ q( e; v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 ~7 h9 N) [* S4 O" D
1 U- u& E, H+ g
其他程序段。。。。。
; }2 c$ Y2 w2 T! m4 t
" f- T+ V2 C! H   free(x_d);
# Y* y# e- I" B/ x% h
* V% }1 u0 ]5 {9 s4 k0 K使用DSP侧单独调试功能,验证动态申请没有问题,  M3 T3 S6 o5 q4 Z3 Z7 X9 E

+ F. g: {6 G5 R+ H9 l3 `6 A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: a5 b6 T. a8 M. ^

6 H9 Z* f1 }5 j2 o" I$ R! z* z4 ?# O# m' y9 I
% G  m$ x' b+ y: c8 X
) A8 j, K. x- \$ f- \

$ e$ `, l2 `, p; K" N, c! S3 k# q/ B4 O# h
1 v: H& c$ u! T: ?" R; {  o4 h

" R7 J# j! c6 X; X; S
2 F, I3 ]3 |+ s8 U' e8 |- i3 q3 y0 s/ q; w9 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 s7 i7 T! i0 z3 c
Program.heap = 0;/ t% H# H0 F# v, ?
Program.argSize = 100;  /* minimum size */
2 M0 w$ P: ]7 r& F6 F! d1 W4 bProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 [: ?9 A  v, G4 F6 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; o: l& t( w$ @3 L- S, a
var heapMemParams = new HeapMem.Params();
! r6 b% s+ ]* _% g3 R! {! VheapMemParams.size = 0x4000;8 s- \8 M6 N! V$ y" L9 v  S

  T, F$ i6 F( D0 l4 s, svar Memory = xdc.useModule('xdc.runtime.Memory');& q& Y  X# g2 s  o2 z" ]# R8 P5 X7 l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. q! L% i$ Z9 p: G2 L
4 ]1 K0 {2 B# z6 k+ {+ V2 M6 ^我大约calloc  每次共计大小为5K*16bits,
) M# m( ~! f8 v6 z0 y% ^而默认配置才0x4000、需要改大。
( z8 i' W) F% p0 V* P2 S5 V. X% p0 Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; E1 [3 ?, V# }1 }9 q! `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 S9 N# k: o5 U1 A, d# B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ C3 A( d8 U& [* z, J/ m% J

/ ]2 J7 Z; P/ `5 h/ d5 V是不是需要在DSP.CFG中进行配置4 I/ S* H; \* I7 D* b' i
我现在的配置为
7 z! U& A7 N! d" h5 g0 A) P/ v" [2 p1 f  n" c. D
/*
0 Y. {0 V3 b6 W" @( V8 D) P *  ======== Operating System Configuration ========- k* A2 g: S" G1 W: b9 E; q& B
*/
$ T# L1 O" L% [: j2 C$ B& C
( y7 A' g2 n& }! \1 q/* no rts heap */
8 C. l  g' V5 Z% f4 c2 aProgram.heap = 0;% ^( t* ^4 E  c- }+ b" Y
Program.argSize = 100;  /* minimum size */5 Q& `9 @2 }  D) L  O2 h9 n+ b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 a3 t/ Z% Q5 r/ O& `: w2 B' [" y- }& P
/* create a default heap */
6 A; m& m. R) ]% R5 Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; I. W/ j# l0 F: ?  P$ j+ g
var heapMemParams = new HeapMem.Params();
' Y  A4 o: ~! I" F; aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 @7 k  W+ W6 z: _( X9 ?# m) x2 z' @7 p' Y. ?& s4 I1 H) o) G
var Memory = xdc.useModule('xdc.runtime.Memory');2 e, ~1 y9 F7 m/ @' }3 ~3 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. B/ I  ?2 {) A- G" W* Y& k' @
: L  p7 e* I/ V; u- ]4 U/ U) q0 w- A
/* configure System module */5 V: P& Q( X6 x& ]  y
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 t( R8 _& b6 Z' T6 p0 m  L
SysMin.bufSize = 0x1000;4 ]5 z  M+ n2 K% N' T- c( B+ X! f
SysMin.flushAtExit = false;  n5 R4 i+ y6 U; f) l9 v! E9 O

; _2 B5 ^7 r5 r6 h. y5 X0 Gvar System = xdc.useModule('xdc.runtime.System');
) e" U' e* q' U' a( `System.SupportProxy = SysMin;8 Z. \  W$ l! s, p; I4 n# t

; {4 t9 ~1 R& J+ W; n# N/* configure SysBios to use the lower half of Timer 1 */
: N6 N# p) b7 x3 n5 _: qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  }% Y; F. g3 @* M8 K( }' |var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" ?0 Q8 J" [- s2 y4 KTimer.timerSettings[1].master = true;, @7 \3 f3 m9 n' Y5 r! ^- u/ \
Timer.defaultHalf = Timer.Half_LOWER;
4 z" n: `; {) H: Q! |Clock.timerId = 1;
4 [7 X! }& b6 _) H# u; Y  w7 y& D8 Y$ }

/ v5 I& I, E  E/*
2 Z$ }5 K4 v0 }9 H; L2 s& m4 A *  ======== Miscellaneous Configuration ========. z6 }0 G+ k0 D0 C9 Z9 f
*/' e% ]" s/ I5 \4 _( a

2 o7 N" }  @2 Y/ o  Y, G/* set default diags mask */
, k$ f" u) F7 }3 `! gvar Diags = xdc.useModule('xdc.runtime.Diags');  m* H2 E7 B: T: c5 W+ H5 W* B  o# A
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, {3 o3 Q& C' t( i% d6 r: Y  q- K0 u# u" Z' V$ f$ d9 z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" J6 g5 C- d$ N  Z9 L$ XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! F9 p; d. ^/ g) JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# Q9 ^5 `: m+ ?6 ?4 N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; _% Z% _! w6 J" @' k# CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! q4 b/ _! o: p) ?; UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" _& r1 A* q; R2 x4 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. W* I8 J' H2 p$ E9 V0 A* a. g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 e) k, Z% k5 r' E2 O" E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% M; e% h7 N& B& }7 M' o. L  o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# \# P- ~$ _  j- qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 B. I0 F4 O. n3 e9 UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  s1 ~1 o) ?0 I5 IDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 o; i" W4 b9 n" P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: n3 M- D# R2 [0 Z2 X1 G. W

" k- f/ Q. K: s3 E8 d: O3 }) S/* override diags mask for selected modules */# k: T% p1 w" S4 k" {8 Y9 {
xdc.useModule('xdc.runtime.Main');4 l& m/ r+ |: v7 H4 F/ O& P# Z1 U
Diags.setMaskMeta(
! A( r: l: y" a3 l3 `3 B( e    "xdc.runtime.Main",
  j8 Z5 j7 ]5 M3 `    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. Y9 R$ a8 |; J: i7 e) C3 H0 z    Diags.RUNTIME_ON
5 I7 ]5 I; `6 P* u);
' a0 F) H  P  g! _" k6 Z2 q7 R% n) D) o, P) l+ ~  t
var Registry = xdc.useModule('xdc.runtime.Registry');) i; j$ r* a: x9 N6 W7 O  Z0 m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" H: K: i9 d9 y5 W) X7 h" E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& p; ?- Q5 M* ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# o5 S( u9 U; ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" x- X$ ^" W/ b) O

* ^7 B& E& s  i/* create a logger instance */* @1 }6 V" `1 ?! }: t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* n7 t1 B6 }$ r5 }# }  Pvar loggerBufP = new LoggerBuf.Params();
7 M3 m0 D4 s8 T& d' ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  j5 o* r9 l3 |, E6 B+ DloggerBufP.bufType = LoggerBuf.BufType_FIXED;  F0 E. S! r  W1 \. m7 v! ?7 ]
( V7 N% @$ ?( @. v. p
var appLogger = LoggerBuf.create(loggerBufP);
) Q, S  B1 T1 w. J5 v  y6 Q( v# ?appLogger.instance.name = "AppLog_Core1";
5 ^& t' s! i* X, H: C8 H, `' n; o( bDefaults.common$.logger = appLogger;
2 u5 A" r! }+ t) O% B6 L) s7 yMemory.defaultHeapSize = 0x8192;    & B. Q2 e8 u! C
Idle.idleFxns[0] = "&LEDStatus";8 F6 t3 _* w! P0 x4 D
Cache.initSize.l2Size = Cache.L2Size_32K;. {" O7 |9 }' g4 T. Y) [2 U

( T7 ^  N5 e) H+ l/ m
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 14:21 , Processed in 0.046214 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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