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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; |) @/ T/ M9 \1 O. e' v- ~. u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) q9 k% ~& h$ S7 o
  C: e) I4 T- A5 t3 \& b4 I其他程序段。。。。。9 D' s3 W8 Y. F9 x! n

. h- V  D, B: ^# _3 w: i3 ^0 W   free(x_d);
, G* d- \6 w6 |: Y6 V" a. ?5 m1 B) R) _4 X- c7 x2 m
使用DSP侧单独调试功能,验证动态申请没有问题,' Y8 @) q& o5 P9 l8 e0 f* q

2 f/ {- J+ |& I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 b; S% w4 |" Q+ R" C' d2 \9 W, `6 D

9 P8 _) P; B6 Q7 s' m& S. h! r7 T& H' f5 x9 e6 ?0 p; P
5 ]9 U( v0 J$ W+ g4 N
7 @! K) k; s" E. `1 Y1 A

" G+ b+ _3 S; S2 [, ^; K5 i% V! N1 V2 W- C
! u9 ^( m, i( c- [( p1 s

  w: }7 O8 D7 ?, L9 T5 W& Q( J* s% {

- p" \9 X; U/ M3 ?% J0 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 h, ~6 d8 Y' J$ U. l3 \% \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: m* l2 H& ~; p, [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* t4 _! J) U: W  E
( F) W! L! j0 L7 Q& z
是不是需要在DSP.CFG中进行配置
( N9 N1 l3 @/ h7 J我现在的配置为0 B9 U) Y0 g, C6 {2 Z

' J6 j- H4 R5 g/*
7 ?7 h; ~, J5 c4 B. A *  ======== Operating System Configuration ========! V+ _  A$ [& S% M7 M0 R( ^/ s
*/
- |9 P( l3 ?" m1 F  h. z
7 z, M9 a5 I+ q* Z/* no rts heap */5 o1 P4 t8 h6 a+ _
Program.heap = 0;
' l& P) T3 Z/ U+ y# Y# gProgram.argSize = 100;  /* minimum size */
+ V' I, O8 K& X% E0 @* dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 _( `$ ^3 L  Y. {+ [
: Y- B) |3 K4 v
/* create a default heap */
4 `3 L; n6 ?  \* l3 S" b2 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. c3 S% h5 U; @& L+ v) M4 {  Zvar heapMemParams = new HeapMem.Params();
" c) g4 U! [& h4 X4 {0 ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! C% J9 j3 |) b% P8 l- u

; b! z% H$ _- K2 ?7 ~4 a1 ?' h
var Memory = xdc.useModule('xdc.runtime.Memory');% \6 q, A1 y6 W& T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) G( c9 x, Q* o5 u0 T9 f
5 e% W% a: M9 W4 t  u7 R0 M/* configure System module */
' D) U6 j& D) t1 p2 tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
* e: g: {( C/ |2 zSysMin.bufSize = 0x1000;: n* D7 Z% p6 b* {
SysMin.flushAtExit = false;' ]9 q# f) n7 b% ~  S
. \- r3 V5 w: ^- x
var System = xdc.useModule('xdc.runtime.System');3 M' ]- Y3 z: E0 j" U
System.SupportProxy = SysMin;
5 b0 G; q7 [* n% [# `# F0 ^7 s- q: u9 i4 b; M' \
/* configure SysBios to use the lower half of Timer 1 */# W* q9 u, _4 m) Q2 {* n' ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( T- \6 r9 J& V$ Y0 H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* |( ~: A7 O5 B6 @  V- }
Timer.timerSettings[1].master = true;
4 f) M0 U4 n) p8 _6 jTimer.defaultHalf = Timer.Half_LOWER;, Q+ H& h, ^& m1 A
Clock.timerId = 1;
: q5 D+ t8 T" S  {8 q! p) `6 o6 Z/ `$ @7 H# O
& W5 n4 J1 `  S
/*0 z* D  Q3 o* }5 t( d
*  ======== Miscellaneous Configuration ========0 E  \" |' W3 n$ m, v; l- R9 {
*/! e3 w* @; B& z. q% d4 a6 D

% o4 D/ u0 r' v5 z+ m. K/* set default diags mask */
* Z4 l: w) b+ ]( Y1 E2 Qvar Diags = xdc.useModule('xdc.runtime.Diags');8 X4 l  T; ^, O) o, J) Z- _
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) }* M% Z1 Z% |. S# ~
4 [% x4 X- R) }" ]1 s1 h: h5 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 k/ W, W0 n! o! i) i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! \5 P5 K: p- `: Z- ~0 @3 U
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 h" q# r1 d6 m, z) c7 l4 f" {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 v7 R/ r, t3 _* m4 C# M5 yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ S6 {9 [: [9 d4 K+ }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 L3 Z5 Y+ J* SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' S! T( d0 m! ]* |3 IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* G9 `& G- d. f) t+ e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 @9 J/ U7 `  ~+ h7 A( {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, H8 W0 X) [3 H/ S9 s( N) W  X6 y9 CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 P1 O4 z! k* d  f1 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' P3 B) y4 x: R; c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& q. Z- X" i8 W+ W: z) [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  `# z* c* I* e9 x  I  Q* o

9 h# [! d, N7 A) ^/* override diags mask for selected modules */) I- g0 r- i  o; N  P
xdc.useModule('xdc.runtime.Main');
$ X! G: u) J0 w' H& L/ HDiags.setMaskMeta(
; C* _3 t% P4 b9 O3 g! A6 s    "xdc.runtime.Main",2 t; h- j% r' @6 M6 S- L9 D9 S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ b5 z$ X- e% w. [2 ^8 m    Diags.RUNTIME_ON
  d1 V% x7 c$ a: w/ V% d);
6 L8 s: N/ ]0 L6 L1 R1 h) e  x9 U6 X% T; b" v, D
var Registry = xdc.useModule('xdc.runtime.Registry');
9 M0 m  K6 J5 X8 T# E# g8 JRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# p. M- A" Q# K% @8 S2 ]) y" m# kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ r2 A; m, m; B: o; a" G* C4 ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 a5 ?: _4 X) @! N, k1 n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 h6 x7 L* |; D) L( E. t! G2 h( @1 P/ ]  c3 z' b
/* create a logger instance */" j# l, d& n* e. V( r$ @( q; e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( v& y* r- ?+ J
var loggerBufP = new LoggerBuf.Params();
) [6 y" V& {1 n( `' @9 \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( X* [: c' ]  c0 }% _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 u6 l% D  S4 z/ y
0 G4 F' X. A# R" w3 e( \  t8 s
var appLogger = LoggerBuf.create(loggerBufP);
* O( X+ ~3 E; r( w2 M; fappLogger.instance.name = "AppLog_Core1";
- d' a5 g/ R3 Z& C2 ~+ WDefaults.common$.logger = appLogger;% U; D; h% N' }. G9 d
Memory.defaultHeapSize = 0x8192;   
9 g! u; q# L+ ^$ jIdle.idleFxns[0] = "&LEDStatus";' X/ a6 O: _7 U4 @, X; E
Cache.initSize.l2Size = Cache.L2Size_32K;
+ L: W0 A8 e  J  o
; D( i( t6 V: H" l3 q9 k7 X
回复 支持 反对

使用道具 举报

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 */; c" H: C6 l( _- s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' m, ]1 n2 z2 L# B
var heapMemParams = new HeapMem.Params();$ j' S0 [& B& h9 [" r+ `
heapMemParams.size = 0x4000;
. S( M/ H$ ^, v( N
5 _/ P7 h7 `. \, t+ d) Fvar Memory = xdc.useModule('xdc.runtime.Memory');8 E% R& R3 Q. v$ Z3 b0 F! ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! `; L1 h! e, f, w4 l5 [

' v! L/ L2 i0 _7 }# Y' S我大约calloc  每次共计大小为5K*16bits,! H' k2 B/ k( J" \' R. C. l  t
而默认配置才0x4000、需要改大。/ @7 j# j. J% g/ Z7 h

9 P, q" c/ a6 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. L3 P9 j5 s6 Y/ B8 X" q/ V
Program.heap = 0;
' A: E) N+ s3 u2 BProgram.argSize = 100;  /* minimum size */% F- F& ]3 d' j9 M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-16 14:51 , Processed in 0.040484 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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