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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 {4 C1 z3 W$ x5 H# I- X( P! v- Z2 x" u$ ^8 y( ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" [- H1 ]: B9 r& y- [! |) b

0 r6 n7 i# ?/ }其他程序段。。。。。& l) H8 {3 D6 \) d, c
  Z$ |) v: V, \0 A  F# p
   free(x_d);& E1 o2 b, I0 M. y- A# ]5 i5 `3 W# a

3 d; i* l' M" J, R使用DSP侧单独调试功能,验证动态申请没有问题,9 A1 b4 q  y5 z. l) c, K
5 J6 l1 y7 _# I$ [3 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 {* z  @& J2 W' X
0 {4 ^3 T) Z2 N5 B! C

" m+ v. o$ @7 J) P% N' H. Q
: P& Q" Z) s; W+ a2 }6 w' g& o+ V* G' W& e" q0 ?: C
6 V& U, N* i" p1 e# Q: t: d

& g! |. c: r: c- n  V6 l; [& s0 U* z7 R1 S0 R  m( ?# u: ]2 V$ O
6 H- h. G; Y# a* q  C. T
7 b. [& ]/ t' U* i
6 {3 ?" _( G6 ^* T" N
分享到:  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 */
  P  ^& i, ^! RProgram.heap = 0;
$ P5 X- X& V& `' D  KProgram.argSize = 100;  /* minimum size */
/ q  j/ U% Q8 z7 @4 _7 ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ _! b- p6 y/ }9 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" b# b4 P8 A. Zvar heapMemParams = new HeapMem.Params();
( H% E& n8 t, |) \% rheapMemParams.size = 0x4000;4 ~0 k1 g; f4 B) q0 b+ f

+ j0 }! \6 S* r3 n# ]) w! Bvar Memory = xdc.useModule('xdc.runtime.Memory');
, n2 C' M% l. V% \' _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 H8 `6 ]- v1 j+ Q+ I1 c+ C- m

9 I$ A4 x& y! w! s0 o( Q- v我大约calloc  每次共计大小为5K*16bits,
  ]& K2 t# e1 J而默认配置才0x4000、需要改大。# K# [& t5 D) m+ @3 a9 g8 |
) j( k3 u5 r  P+ x
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明0 D/ o' {3 ~. E/ X2 b; R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' U4 N- _! g+ ~: v* ~$ x' D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. I& p0 q8 w$ J9 m& O8 W' j

9 T( h  N/ }# E是不是需要在DSP.CFG中进行配置* z0 _. m& B) a1 j
我现在的配置为
6 |5 {) f' G. e! V1 d+ U( C+ E( j' \
/*, l; k5 }8 U% j: Q% R
*  ======== Operating System Configuration ========" t$ K' n9 q# `- i& |7 \
*/" j% B* P- E. b, }/ ^# M, `! j

2 R0 I2 i: ?6 v) N- N1 o/* no rts heap */
, J$ x* X4 s3 G& _6 _& H3 @5 L: zProgram.heap = 0;
8 Z+ ~0 f% T* ?/ G8 t, h- \Program.argSize = 100;  /* minimum size */
7 k2 S1 k. m; C. wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- b) Z: |8 s; c6 R) {( @
! N6 W0 V/ O1 b" \- Y/* create a default heap */
: a" F8 [  e) i; t+ t* K* wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 t* e1 @! q- Wvar heapMemParams = new HeapMem.Params();4 p( G. q: r. l1 z+ e- q2 R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 F% d( E. K: D$ [" k4 i

! b2 ~- u; |% {$ c# A6 o4 ?
var Memory = xdc.useModule('xdc.runtime.Memory');
: k! I1 k. R5 E7 Z; lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* d1 y. Z: A$ O5 w4 T

- F$ W; E) V7 A2 ]' a$ |. g$ p; J/* configure System module */
! {4 M' }" j' P! E& l+ {% Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( T( \. w% R/ |SysMin.bufSize = 0x1000;
" u1 J  f5 J9 v, t4 f/ T, Q3 iSysMin.flushAtExit = false;
5 o1 D0 N* i% I- Q3 M! w2 {: s# X$ V
var System = xdc.useModule('xdc.runtime.System');9 C0 |2 i' Y# m& a/ F% j
System.SupportProxy = SysMin;8 ?4 D0 ~& `. A  Y

: C' s+ U' Y# E- Z% O/* configure SysBios to use the lower half of Timer 1 *// G* s' n: ?) C: [# Z) r1 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 X& e0 ^8 ]$ o. k8 y1 |var Clock = xdc.useModule('ti.sysbios.knl.Clock');' d) U1 v" {3 T) r+ \( z) E
Timer.timerSettings[1].master = true;
' \; O& {. U) ], Z0 r" _Timer.defaultHalf = Timer.Half_LOWER;# s' P7 c$ G- W8 O9 F6 t6 f
Clock.timerId = 1;
% ^+ z, g2 K" x3 ~! O3 J9 v: _, ~' `8 B4 b* W3 y9 [
, Q! K6 t  x9 L' K% J: w& n% |
/*
6 H5 X- s  `' s$ K  M* R( Y *  ======== Miscellaneous Configuration ========1 I2 ^7 w5 G2 E; K
*/
" a2 A- r4 q- k5 l) c: [$ n: i
/ h$ {/ B# |( M9 }6 u/* set default diags mask */  U, M* {! G6 b  [
var Diags = xdc.useModule('xdc.runtime.Diags');. E4 }9 u: p1 j  R) ~3 P) q/ B, s
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% a) B# Z9 V/ v9 L6 i0 h/ e' G7 [) I$ }4 C3 p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ n9 ~) C% N5 c0 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; \- l5 K1 t, y: M$ g" Z6 S6 Z3 {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  v6 L" `* K+ h  j$ Q. x5 E) F! {Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; I! w% [+ C4 B9 M! C# pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 T0 s! u) ^* ~* F5 ^; g2 l' C. M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* t2 d+ r' f1 [3 T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  `/ q) [  J' A! [+ \' i3 U  r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. ?2 ?2 z( D# ~$ x# X' o
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 q2 o) z# G2 \! G* s9 W+ VDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ ?2 F3 l9 Q6 [& z0 q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 s+ _& b2 |, o6 t4 W% i' I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# {6 V! U% e6 ]: Z  H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 V+ d" n# u. n  s+ D
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 w6 E1 l0 s$ S, p( B9 C1 n0 Y! s1 ~
/* override diags mask for selected modules */! F  e! b6 o! I! j& O
xdc.useModule('xdc.runtime.Main');$ r# E4 R: }* c9 Q' Z$ ^
Diags.setMaskMeta(1 `& c) j$ Q! R; h6 s; V% p
    "xdc.runtime.Main",, T, s& q' X: T/ ], m' f
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& e1 d1 L& N* \- B8 E; ]
    Diags.RUNTIME_ON' O. t# r* q$ d
);) a) `9 X- G) t. a$ Z" [

) ~. N  Q# y5 v$ t* }; V7 cvar Registry = xdc.useModule('xdc.runtime.Registry');4 G& V0 q7 {- e  A  w3 C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ t, b1 d6 J; d) Y9 H# w. T. X/ Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! J0 F0 {; J' ~% B- gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ o; k3 X+ U0 I5 w2 PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 Z& l: @- [' @1 c' v5 ^' r2 b* O5 X  b% C5 V7 r  \9 Y3 t
/* create a logger instance */' ^4 l5 i/ |" c4 T4 ^9 J
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* m+ n' E: p) c3 qvar loggerBufP = new LoggerBuf.Params();. i3 G  [; n  j; L% u# m" y1 r
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ \0 \% d( G$ D4 d$ ^1 x. w* S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) V$ |" X) X! h2 g2 T# h
) L3 \/ K# J4 ]) ~4 |0 p
var appLogger = LoggerBuf.create(loggerBufP);* f9 X) F: J  ]/ G
appLogger.instance.name = "AppLog_Core1";
  n$ Y2 [3 J( F& g  ~. eDefaults.common$.logger = appLogger;
/ `0 h) M& m2 Y9 H: ^2 AMemory.defaultHeapSize = 0x8192;   
8 L5 [% e* D0 kIdle.idleFxns[0] = "&LEDStatus";$ e, z' v6 O! ]
Cache.initSize.l2Size = Cache.L2Size_32K;; P& S1 W1 W" h$ q# n0 t# E6 z+ F# u7 z

; ~/ l- D+ B  J/ ^6 t; a  p
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 18:07 , Processed in 0.041718 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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