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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% b4 L$ x+ n+ v' J1 y5 B7 }8 x; t( Q) m: R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- [# X# l- ^- [0 \- |9 p# P$ d6 F5 Y. U# I0 ?- S; j+ B5 M4 f& W
其他程序段。。。。。
' S4 \8 i, x3 V! {# _ $ ~4 G5 a9 B% M6 r& f
   free(x_d);
  W! U' x6 e/ T; K# X9 y# b. I2 r5 f9 j
使用DSP侧单独调试功能,验证动态申请没有问题,2 O" W$ o0 L7 J  }" F% `
: R$ y0 G, x7 x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 D' e* h4 H$ b

, Q: k7 l' R9 R4 G1 s" j* O8 Y# ?; o  x: I- q6 \/ Y

' q9 z! c# e8 J0 Y! z9 Y9 }% B% B9 q
$ i) U  x/ u1 [* y5 o' X! ?! h" k
- d/ E6 [9 S5 U6 K8 o7 v) o) s4 O
* e6 f1 v8 l8 N8 u/ [% ?% v; U- @* |
! m- O* [5 h5 D5 g

8 O" \* C+ \! T: a, `
. I# ^  `, g& b6 j$ E6 I2 C) t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! @  s$ k: s/ ^' l& N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 M$ p( \* `1 |! G  U
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 \- o# J- i0 S$ q' s/ k# J9 {

+ H( c3 a4 D$ V! a# Z  i是不是需要在DSP.CFG中进行配置
; ^" Q" }0 m0 R我现在的配置为
% @9 M, N. k! [5 L: G4 I+ ^4 r: {' @& o. O) \. Z
/*# l+ C; |6 Y1 |" P3 u5 q3 N) _) `
*  ======== Operating System Configuration ========4 q0 p0 O5 v5 @9 j7 s$ I
*/
2 }( o5 L0 e3 F7 t( D6 i) }& m5 u4 j) C* i9 s  F6 w
/* no rts heap */0 K$ o: U8 U2 \) f$ R( f2 F$ i1 v
Program.heap = 0;0 n0 o( f5 b5 O: E( T! d, e
Program.argSize = 100;  /* minimum size *// z- u- h0 c" v( W+ N3 a& P6 j. M; r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 x# x1 J" l. S  T

3 Y4 u9 I/ z: L# D9 L- g0 S/* create a default heap */
" E7 K# k% X. Z2 N% jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 W2 A% i. l8 r) T8 ~5 U) f
var heapMemParams = new HeapMem.Params();) A0 F1 M+ t4 m/ _1 @: Z- {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# H$ x* T2 q& H& J8 E+ k4 w

$ L* k: H! \; E' U
var Memory = xdc.useModule('xdc.runtime.Memory');
$ ^4 }$ ]( l# @- M9 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. j& D! E! B) D( W  S
- h$ L3 t. ~6 v/* configure System module */2 A; o3 o1 ?, g
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; _" _; V. b- I1 n  e7 s7 ]( T5 n, ^SysMin.bufSize = 0x1000;
+ Y, s1 J" \" xSysMin.flushAtExit = false;% r* i  B: j. r. {7 C

, q: ~9 t, S% k' n. m6 Xvar System = xdc.useModule('xdc.runtime.System');
2 ~) K5 }, U, c5 ]) q1 e: o( wSystem.SupportProxy = SysMin;
- F7 J( ]# S, P. C" D: ]+ q) y. T' S1 Z$ o* e% }7 Y3 D5 k- F  z( K/ j
/* configure SysBios to use the lower half of Timer 1 */1 S0 [3 E  o- [% U" x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( F5 Y2 \8 w6 Y$ X/ E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 t3 X) ?4 ]  _( {. K& P
Timer.timerSettings[1].master = true;" Q( J  P: d) u, n& j- O
Timer.defaultHalf = Timer.Half_LOWER;( U# l7 j4 f7 N' ~! A
Clock.timerId = 1;9 y4 P5 R" H0 \% ?
- n( ]% A* u1 A' G. X& ^

" h' A6 t9 i# \6 V  D/*3 ]+ u. ^) @; V7 k" W& P& L2 I
*  ======== Miscellaneous Configuration ========
/ d# w; d) o" z5 b4 u0 B3 H */9 i6 d$ @4 ?  y2 T* o; g

9 Z* e6 A. L" p  k6 G6 Q4 C  M/* set default diags mask */( l8 D( Z$ H2 A' P( Y
var Diags = xdc.useModule('xdc.runtime.Diags');1 X( _% q$ D0 k4 T; m& W9 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  c! u; |; j5 |% r: H/ u5 f6 [- `" U5 d  `' ^+ H) k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  H% e) w/ j% F2 TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- e+ D2 ?/ }" I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" t* _- b) M. M' a# [4 j% U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 D1 c9 y; `* r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- F+ P* B1 K! v8 T+ q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- B5 L6 e! b' q* K( s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 v5 g" `5 q+ A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* a$ t( t  n- G7 B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 o+ k5 s" Y% }3 `0 t, Z7 zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 k( d/ t* r8 h! G9 ]9 D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 _3 Q  N& j3 x4 N* {( h, @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' O6 M& U: C( S4 {; C+ n$ nDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 u8 ]9 f% M6 QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ K- j( {# T" b7 n
/ y# [1 \$ H5 Y0 H0 O& ]/ O
/* override diags mask for selected modules */9 p; W+ n  o9 Q- B/ W( u& v" h
xdc.useModule('xdc.runtime.Main');5 Y" g# A) |7 q* H/ J+ i6 d" D* o$ d
Diags.setMaskMeta(9 m: N; H; K8 T! u6 f
    "xdc.runtime.Main",
/ w( ~- w3 T3 g) `6 Z' G2 K* G! t    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" `! v4 N/ X  o4 q, |    Diags.RUNTIME_ON
, W% O. n9 f$ R7 Q* y1 S" I4 Q);4 n) [7 }* N" n/ d

/ T, y3 D  q) ^, Y3 b) g$ bvar Registry = xdc.useModule('xdc.runtime.Registry');
7 y3 G7 O2 h# }) c+ W! b- n) FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 @6 G7 Y9 v( l& [* S* {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ f9 h# C) b3 I" A( C( V6 |
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- a# W1 x" @8 T7 h7 M6 f: qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 _! Q# s: }9 y5 g: q
- c' f5 F5 X$ a5 g. @4 _9 D  a$ x/* create a logger instance */4 {; `' B* W4 e' {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 N0 a/ s8 V$ j6 Z( ~; xvar loggerBufP = new LoggerBuf.Params();6 x# E& o* d8 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 W+ f2 ~, P: R8 t- `8 ^& i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ n: d8 W- J2 s; k6 A$ i+ d  i1 A) O: |" F3 H
var appLogger = LoggerBuf.create(loggerBufP);
6 B1 f- r8 S( CappLogger.instance.name = "AppLog_Core1";" H! m& y0 k- @% C" k2 o6 A: E
Defaults.common$.logger = appLogger;  A4 S' l( D# B! v+ Y! M
Memory.defaultHeapSize = 0x8192;   
6 a; [& _! q" R" rIdle.idleFxns[0] = "&LEDStatus";
' i; r+ t8 T/ i* U) {Cache.initSize.l2Size = Cache.L2Size_32K;
" O4 Q- R* f/ B9 ]
4 I+ Z# o, T2 z8 X; [/ B: _3 U
回复 支持 反对

使用道具 举报

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 */9 d# Q' Y) }# F  s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& B, o5 v, ~' M7 Ovar heapMemParams = new HeapMem.Params();
) V* Z$ q* v, ]& o+ O  WheapMemParams.size = 0x4000;  m0 e+ U2 e. }" i

; w0 u& ?/ _: Z: g* |# xvar Memory = xdc.useModule('xdc.runtime.Memory');
: A/ t5 X5 Y& NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ i  d" a) u, P2 [. ~
$ }1 g6 L1 W* v- d1 B
我大约calloc  每次共计大小为5K*16bits,+ ^( E( w3 p: n2 f7 S/ j0 x
而默认配置才0x4000、需要改大。
, C3 X3 `! B$ V: n7 H+ f' u  ^
' F8 b% a6 H/ _' Z9 X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& a1 H( \. E8 f2 v# C% U7 tProgram.heap = 0;
$ {  H) C9 {1 t5 ZProgram.argSize = 100;  /* minimum size */# N' e+ [3 m/ A' j8 H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 18:07 , Processed in 0.058852 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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