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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 Z2 e( b* d( W, l

& ?, `" j7 C' r4 s' l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ o5 X# G7 T! }$ n  L: d
4 g% r# v$ S5 f" s! h2 H其他程序段。。。。。
! c/ U4 l# C! m" Y
' z: y/ c( A' T6 k/ l( A   free(x_d);
: x2 j/ ~/ w1 H9 u" Y/ @$ D( |8 Q  h
使用DSP侧单独调试功能,验证动态申请没有问题,
' ]5 I5 I* [- K) y
( O, m, C; Q! c! l/ W4 b9 x7 \: T0 h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! I0 L; q/ U! E; y+ B

; F( x! K% z# Y* U. i
" M  H+ j* h: [% X: T6 U2 F" c* J# f
: Y* j# d& W% l& P, {4 C7 w

) u6 \6 ]" g. |" a. [/ C
  ^' y- s3 i2 O7 q6 c# c
$ d2 i& H9 G3 S+ P, |# m4 o$ n$ F3 r9 r
1 n3 I3 k& g' ]" [
- b2 Y5 T- a7 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ l- O; o! \! p* }% J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 c9 l- F3 T/ b0 \6 {0 N(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 O2 Z% y5 `) H9 J

) ?* U' Y. ~, e- A3 Z; u是不是需要在DSP.CFG中进行配置
: V+ q3 g9 A, u! y0 V我现在的配置为: ]+ M2 {+ n, |9 J/ c
% U, b; j9 w& A
/*; b2 e: z6 n4 O! }$ q% \
*  ======== Operating System Configuration ========
" H' c5 T1 y. v  K! f  a */7 a: e; c4 y7 {- V5 Y
7 }1 y: x! P9 x
/* no rts heap */
1 [7 `! @& f% M3 ^, A& v! kProgram.heap = 0;
5 i2 V1 _" ]4 D; KProgram.argSize = 100;  /* minimum size */
' P$ v* |: ~# aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; V  |  m& F7 h1 J7 P6 H4 Q
, A4 l' e, J3 `$ H& @
/* create a default heap */
# k* e. h% F- H) N+ E, Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ R# ]1 o2 \. f5 x* I
var heapMemParams = new HeapMem.Params();
- J$ Q6 c/ n/ C, W0 r+ _$ JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 x; N6 p9 E% g' f) ~- o! g9 W+ c0 ]: {& X' ^
var Memory = xdc.useModule('xdc.runtime.Memory');
0 l' K3 J, Z3 D! V% r. C, r; pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 d# K1 J' e( B/ g) L$ E/ A

% Y9 |. H5 o$ Y: |9 v/* configure System module */
" V7 c- S& I% I% P( v1 f/ Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
) R$ @  H$ n4 ?SysMin.bufSize = 0x1000;" {0 g1 H( M, S* `
SysMin.flushAtExit = false;2 y3 _5 @4 E0 l+ p9 D* a

9 b! y* c! ?( n- `% Lvar System = xdc.useModule('xdc.runtime.System');9 {+ |$ E& Q- Y$ P$ o
System.SupportProxy = SysMin;0 o% T2 N  D2 f& Q
) Y! ~7 Y1 q8 X  |
/* configure SysBios to use the lower half of Timer 1 */. f1 d. F$ c' ]; W) \3 T  {: B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 j- B& m8 f& Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# ]6 \/ ~! Q5 \* F( |+ ITimer.timerSettings[1].master = true;# f- {, ?6 V) X( W3 K
Timer.defaultHalf = Timer.Half_LOWER;" o2 `" N) n# q. t
Clock.timerId = 1;
4 l4 z( R. a$ i$ V* L6 C" T
* w; D/ F! r, g+ a' M; S# z; \* z
% D7 C( i' i( w, D( W7 X/*) |# M, M7 `. q" v4 Z+ }. c' B* P
*  ======== Miscellaneous Configuration ========
7 p4 C2 X% l' L% o */' }7 F/ |2 b* u) {5 f7 Y: R% Y
2 A. ]& T  Q5 h! t6 k" S; o
/* set default diags mask */  N% A7 b2 I  N$ i# b
var Diags = xdc.useModule('xdc.runtime.Diags');1 H! e7 l$ y8 R; U2 d6 a
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 v! a0 V' @3 N9 y1 }$ Z+ |
- g2 Y9 }6 q% z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ A# J4 }! U, D: N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, E7 b1 v& N3 o. oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  a0 g( |: ]# w0 \: A& RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- n& N2 t2 C5 ~5 i0 z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( C7 f, m! b! g1 K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, ?) n7 R7 {, W% M1 |4 `+ r: C+ S% a
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 g8 n7 u7 a# A, T. Z# u# U" @% JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 N' O4 V! A  m' t! U( ?. K. R7 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 H* A' @& I" zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# s6 D( d/ Y( p  f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& n  M: t. r- pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; F3 t+ T0 u9 z6 y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 }6 I- R# y# ~. D$ T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 D  P! k" I; N1 q, B+ f! N) E: F; L, s
/* override diags mask for selected modules */- i+ D: W; s: [/ f5 \# A4 N
xdc.useModule('xdc.runtime.Main');
7 P" \4 B5 Q, k4 R/ pDiags.setMaskMeta(* m- j! y/ C1 @4 B
    "xdc.runtime.Main",$ K1 U# H' Y) G/ Q% e6 y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% W1 k1 O3 }1 v6 E
    Diags.RUNTIME_ON: B1 T. v/ m1 l
);
' V; S5 ~2 X( m* ]
* g4 Z9 _/ ^" i1 }var Registry = xdc.useModule('xdc.runtime.Registry');) f4 _, D, h  H. k; o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. p, W$ s+ }" y0 z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( I  m! ?5 F9 `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- s8 H& p1 v5 wRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' Z  {- v7 t+ W; h5 ~' h. ~
- o" v8 j6 c$ c! U% _( U2 R; i/* create a logger instance */
+ E; a$ l( z( j8 `9 T$ T# Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 A. a! ~5 n2 d- \* d! S9 h9 d
var loggerBufP = new LoggerBuf.Params();% \, J$ R, s) t
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: \  H3 n: o) x
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ l4 Q8 o6 j' f4 }# g! v
: h2 \0 i: l$ e" J' \
var appLogger = LoggerBuf.create(loggerBufP);+ m+ }4 @; c0 X) Q) z# `
appLogger.instance.name = "AppLog_Core1";* L; w- s0 _7 e
Defaults.common$.logger = appLogger;* B1 @% O4 ]4 A! }
Memory.defaultHeapSize = 0x8192;    / W# z; ^! G" h! h- i
Idle.idleFxns[0] = "&LEDStatus";! K# g; [# O2 Y% D9 }3 L
Cache.initSize.l2Size = Cache.L2Size_32K;6 Q+ ~. D2 {6 J2 i

% |0 t: w& D: |0 C  x2 Z# n
回复 支持 反对

使用道具 举报

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 */6 U( e4 ^; M- x" z# p9 |$ ?& X* V% L0 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! y/ P* K! ^: `  U
var heapMemParams = new HeapMem.Params();
9 h) t" H+ I$ XheapMemParams.size = 0x4000;
& n5 }* c2 f/ Z; b) T  E1 j: c) `
; P  ]) _; s' n  _4 _5 Z/ xvar Memory = xdc.useModule('xdc.runtime.Memory');
6 A2 S* L. S2 Z0 b2 h/ eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 V1 T+ j+ [( D& R. Y, L
. [8 E& ?+ v5 V; {5 r% n' M
我大约calloc  每次共计大小为5K*16bits,
3 m0 n) {' l: l8 C而默认配置才0x4000、需要改大。2 P6 e: J8 V9 O8 x; ^: S
6 V, W' I2 z/ {) @* z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( u0 B0 t4 U  ?7 MProgram.heap = 0;% N8 F; U/ C' D
Program.argSize = 100;  /* minimum size */
( {9 f- T5 j) L- A1 I% m& rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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