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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; A1 s5 C* O# G' {7 t7 b' t+ h* c  P' u# H# o" g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% m6 ]  I, R8 y5 y5 h/ O# P# N
6 N+ @+ r9 C1 Y6 A, D5 S2 R- R
其他程序段。。。。。
3 Q3 s! j1 C7 Q9 L6 G
" E" |: M9 M! p, b   free(x_d);: v, U7 h- H9 E7 X+ H9 F- Y5 Y
6 G. F& }8 S* Y. E) ~- U) X
使用DSP侧单独调试功能,验证动态申请没有问题,
" U: ]( V. ?# A& d0 Z# U) ~( R7 k
- [! \: Z& Y/ t' z; {) Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- R2 V) Y. ^$ i

/ U! X  w+ a) f/ s2 E" y, n
9 T' ]+ O( t9 K5 F  s+ \  Y1 j3 a5 T& U! ?/ l7 l" D
5 y& i7 P4 d* j' E8 Z9 x
: m- v' u6 [7 `3 T  s1 K

: `. ^, \' X9 {# |6 k2 K' n3 ]9 q. e' n- k
$ f4 h9 y. h% K  k, ^3 J2 a5 u
( s8 y5 k% p9 D' }. l/ {1 h

; d7 f) |% G# B' U3 M  \- P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 ^8 h0 H  z* f% X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 a6 L6 s5 X2 \/ c9 c3 |' f- Q3 _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 D* p/ H# L! V8 L" L8 f7 V3 _
# O& f; M, x; R5 e) w0 Y
是不是需要在DSP.CFG中进行配置" @5 ~3 C" `4 ~+ `6 [
我现在的配置为8 [% q/ U/ z6 h8 f. U

- u4 c, i7 Q6 ]# q9 R/*
$ L; m4 Q+ O* ^8 m+ w$ T *  ======== Operating System Configuration ========; U6 N; o. k8 X: r7 \, \
*/
: `0 M* Z( Q/ t, F6 }5 k3 {
5 K* ^  S* P1 z$ }8 z! k/* no rts heap */
( H! {$ V$ D: c- D! X; S+ n2 DProgram.heap = 0;) I( K1 `' R+ ~* q
Program.argSize = 100;  /* minimum size */
8 U, O& {) L# @* v- I- YProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 i, o1 C& `1 p7 ]8 J8 d, _* q+ Q( w* L" `( X: j: M
/* create a default heap */
# Z1 h7 I* x5 J' @- K5 q; c- ?0 E+ mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ ~$ @- C( o: k7 ~7 Q1 A
var heapMemParams = new HeapMem.Params();6 B6 o" {: S4 M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 a! Q$ s! ]2 o- C" [' A/ `9 s6 @- k) O  S, |5 G. H. m
var Memory = xdc.useModule('xdc.runtime.Memory');9 R* [8 F, L0 A2 r) h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  c9 {" R8 f. y6 [7 n1 @# |- y8 l

1 V8 P4 U( {$ E8 a7 ?. s% K/* configure System module */
+ ]& a. Q2 s; p% [1 m- _. ^+ Svar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 m) l# g! @* N3 hSysMin.bufSize = 0x1000;  ^, M2 A* z( |& P6 H3 P# Y# l, q, a
SysMin.flushAtExit = false;
. r% Q5 N$ y2 i) p* ^/ u0 \9 ^
+ C2 b& p3 w' `. f5 mvar System = xdc.useModule('xdc.runtime.System');' n1 u" X, r( G1 z2 _2 U
System.SupportProxy = SysMin;
- z% `2 n1 w* W! N, j6 y
* a9 H/ c3 J% j/* configure SysBios to use the lower half of Timer 1 */
) G4 t% Z* x3 V1 j6 J5 G+ Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 V1 f8 L2 W9 v- I3 b( yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% }" R- T5 P& g& H+ J( V
Timer.timerSettings[1].master = true;. o& A( c9 _+ e  }) n
Timer.defaultHalf = Timer.Half_LOWER;
& M7 N; p, k: k: G- C2 @/ r9 LClock.timerId = 1;+ n$ L. c( h# \1 z

/ m. |7 F; P' w: }0 }. [( l7 a- l( r) G0 c% y1 |* V
/*& y- T: e) U3 s# ~' f' ^0 M
*  ======== Miscellaneous Configuration ========
6 }! m  }. @' E8 N */  r; z- F- Z( c- @9 n6 C" y' [8 L$ T2 Y
) U, i' t" [, s: ?# S
/* set default diags mask */
# X- A) I) b2 Q3 yvar Diags = xdc.useModule('xdc.runtime.Diags');
3 @8 u+ m% {/ Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');' A; H: }+ v7 F: R7 t
7 }  N" _1 \6 e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 ?+ v2 Z0 [0 R9 T/ |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 S  z8 K' S+ x/ Z6 l6 MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; k. M6 x# y3 T  Z; D& b& ?
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. ]$ v  i# z1 z1 f! }Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) R5 t" q5 W* v' T+ C3 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 b! _5 X' q! a! {$ F4 X$ nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! @1 q9 v  i3 f, nDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; o$ V) s/ j3 iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 x+ {1 L' b# s) {. w' O2 l/ bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" R8 [4 L4 c: @
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 W: ^: ?; }% C2 g) g& `. }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 v' \0 {4 \0 U1 oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ ~+ a: j) z. d" @6 j# `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% U9 E* V1 A& m1 ~" h! X' p7 c
9 u# \  b0 E; A5 u! a9 Q- Y/ ?
/* override diags mask for selected modules */
$ p, c5 J" O# X6 A7 S9 Pxdc.useModule('xdc.runtime.Main');) ^' s7 z/ M+ ^
Diags.setMaskMeta(# [( y. k+ X2 Q) w3 z5 j
    "xdc.runtime.Main",. [2 }3 X9 t0 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ N$ G; H. F4 c$ v
    Diags.RUNTIME_ON
- T( i4 i- A0 A$ Q, k);* ~4 Q" C1 ?# f8 H

2 |! z/ \( j8 K7 Cvar Registry = xdc.useModule('xdc.runtime.Registry');
' }: L$ U8 o8 U4 O" h+ VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' q* \0 A2 M) L8 Z3 @% yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  p4 n, s+ v4 ?0 }" c' z$ s$ j9 [) GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 T7 }4 W% J/ hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) j* b6 }7 w. Z! x) f

% g  A8 f& ]8 y) B/* create a logger instance */1 M+ z* S' b- |; W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 Q5 |5 b5 a* l7 @; S, P3 Bvar loggerBufP = new LoggerBuf.Params();+ H( k; R, i' l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" k6 J9 `1 O7 z% O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 {1 C+ z9 Y1 I$ X% {/ w- P* Q1 V9 R  @/ J* g9 U3 k2 B
var appLogger = LoggerBuf.create(loggerBufP);: l1 C3 E: w& x  r* d
appLogger.instance.name = "AppLog_Core1";+ f: u. B* Y# w6 l, {/ P! F
Defaults.common$.logger = appLogger;
* z3 Z, Y- _' u& Y+ z! ~Memory.defaultHeapSize = 0x8192;   
0 x5 N. v' j; NIdle.idleFxns[0] = "&LEDStatus";: o7 m3 }( C6 U3 H/ M1 G+ {
Cache.initSize.l2Size = Cache.L2Size_32K;! H0 u/ Z9 m! x& {7 ^/ W
2 U# s. p# S8 q$ w
回复 支持 反对

使用道具 举报

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 R3 T2 n/ M* K; i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 w' e) g/ N) q( d. A5 l- c
var heapMemParams = new HeapMem.Params();
, |/ ^* x9 x2 Q0 `! PheapMemParams.size = 0x4000;
/ G7 ~+ M' h" b# U: m/ w% n3 f+ k: t
var Memory = xdc.useModule('xdc.runtime.Memory');
1 K" }$ L- a: O5 pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. B  Z) `7 L/ i! f

0 \3 J+ f5 N  P2 R! W我大约calloc  每次共计大小为5K*16bits,
) l4 L, l/ ]! t, c* `' ?而默认配置才0x4000、需要改大。# w9 F% |' E  \' ^, s

6 |' {0 B% T# t) I( g  h; d  W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: f; i/ S* S1 N6 U8 `; ]1 pProgram.heap = 0;
2 A  R, r% U, @* _# M; `" VProgram.argSize = 100;  /* minimum size */
! _  G% M# D! `+ h& [! OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-11 09:31 , Processed in 0.046033 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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