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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ ]6 X& z% H  B$ P9 G0 ~; C
1 G7 {0 F. A7 Z8 V5 x: ~+ f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, O/ x! @  c( z& f
2 C9 r4 }# F, Y. l
其他程序段。。。。。/ a$ K7 P4 q9 ^
1 b- e9 M9 @% m1 G
   free(x_d);# Y, g/ {+ d/ Z3 Z$ ?

; v1 ]+ A" K' f6 }) ]% B9 \使用DSP侧单独调试功能,验证动态申请没有问题,/ `) o: S1 M) H+ w5 e% l$ S0 p5 z
. t" E% N6 K7 F) J0 ]9 v( P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" B; E, _  }; H
2 o4 J6 @: d5 n- o
, g8 m2 P# W- h0 a, I
% ~% n7 e4 I/ W1 I/ k
2 ~: \; l1 _+ e; v! r3 W

8 s3 y  w# v& L8 H  S5 e0 Q8 V  X
% s6 U" v  z, b8 z1 v3 d, ^5 _" Z; C6 P: g
' R$ e) S. A1 k

7 D$ ^% O9 ?$ _6 t3 E) ]1 ~2 D1 i' W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ @/ s. ~) e. _+ S4 N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: D# I& g; M, T4 k(不过疑惑的是,为何单独DSP仿真就没有问题呢?), q6 f7 _; \9 S2 X$ w- `/ U

' q; D2 q$ J: ~: h是不是需要在DSP.CFG中进行配置
% ]  Y$ j* u* r/ ]* |我现在的配置为: c! l& c' Q8 s* W

7 d1 B* U& R2 i6 p$ A# J4 W- S/*
3 l9 z- [- m# n, a3 M *  ======== Operating System Configuration ========+ `; h+ X; {$ w7 d# G  P6 t
*/
3 L2 S" P! \% i7 T0 i  g7 v
( R4 ?1 _, b) E/* no rts heap */
6 [5 H; n* H0 ]! |2 C$ r" ~- eProgram.heap = 0;
  C1 H& e) W, H! y0 C1 v* [Program.argSize = 100;  /* minimum size */
. ~$ T" @6 q5 X* v5 B. l% @$ fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ [0 v2 X8 a7 X5 Y- V! |
% `% P9 x! V: A2 K2 `. P" f
/* create a default heap */
  t7 ~5 }# u+ Y) F  f! L+ Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ ]. {/ y, r  h/ lvar heapMemParams = new HeapMem.Params();
) j8 L. x+ p6 s; d4 g7 xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ F$ P* S. i* v6 p4 o

" ]2 g+ u& Y/ }% c9 D
var Memory = xdc.useModule('xdc.runtime.Memory');0 E) O8 y3 C* I, y3 S9 P7 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: U& I( }3 u2 P
6 O; O" \5 h# x, X- m: @* A0 ?/* configure System module */( A: d' k* P9 {4 Z$ e- F7 }( E
var SysMin = xdc.useModule('xdc.runtime.SysMin');: O4 Z$ f0 Q, o+ }
SysMin.bufSize = 0x1000;$ G  c5 Z3 ^$ r& f
SysMin.flushAtExit = false;
- x! F- l/ R: U7 l/ m; x6 X& N. J: q/ |9 Z# n
var System = xdc.useModule('xdc.runtime.System');: f! J* Z, d( ]  \1 j! ~! I
System.SupportProxy = SysMin;; W1 k! [) s/ h) \, C0 J& s( M
( x! h  k* B" @" |6 p; D) H# ]0 |
/* configure SysBios to use the lower half of Timer 1 */
% G4 i. g$ I- j) s+ n& Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 j  ~) P0 V9 V- H9 K$ X7 W8 o7 M$ `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: o% ?# [* d9 p0 f
Timer.timerSettings[1].master = true;( m2 R7 `3 \: [. A/ d" o3 j8 `2 j6 P
Timer.defaultHalf = Timer.Half_LOWER;& k. b# r3 D- v9 D! {* t
Clock.timerId = 1;
9 F: J- z2 I: B+ X& l2 i, N& _1 Z( [8 D( o

- [8 |0 k8 ~3 \: M% s) x/*
  O+ g- R  K5 c( B9 _1 m% f$ ^' H *  ======== Miscellaneous Configuration ========
7 m! _2 c4 d- Q- Y" F1 h3 {7 } */0 o+ H/ K6 n  z# q# g
0 D; s3 B7 r; B
/* set default diags mask */( b6 Q( X9 I" C4 h7 V
var Diags = xdc.useModule('xdc.runtime.Diags');* h. ~1 z- C' d8 }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 d1 m, T* U8 i- d3 @5 Y: w4 F$ P4 h7 ~3 r2 {) L) R, [$ b4 x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' u6 u/ {- T9 n- E0 X2 zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 a* A" ], ]0 {0 z. aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 D# g& x. v. G! ~. ?$ |9 a" |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( }- a% L3 i! a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// S! Y1 q" q' V& K& S3 `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. |+ Y# z- b$ {1 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* S6 b$ x& L5 e4 t) S5 ~. M4 o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 T- \3 S: }( f6 L* K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- _/ X9 i$ v. V+ o& K# x+ `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( o  ?% y% ?9 c' |" i* zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 o# z1 R; `, N4 ?- j. A  y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 Y# _. f, T: D
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 L& z9 g5 u! f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  L: |3 ^* }$ X, A: z+ h7 ~9 @) H( k2 Y$ q9 b7 p! M; j, D, z9 S
/* override diags mask for selected modules */
$ {8 i& \: x- xxdc.useModule('xdc.runtime.Main');
: }5 L0 s! A/ T! [% O0 Q. ^Diags.setMaskMeta(
3 C$ a; H( l8 ~- s9 ?: w( z    "xdc.runtime.Main",
# |0 m& P/ x' a3 v6 O" B; L; |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 b+ K0 u" m8 @3 L& }8 c    Diags.RUNTIME_ON
" K- Y$ \7 V+ P);
& W% u% i- [9 X8 l) g
8 g$ Z! R) i6 }var Registry = xdc.useModule('xdc.runtime.Registry');
0 ?/ M1 |) _. P/ G, T5 q" A* u$ q4 H4 ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) C" U1 g6 U! |0 h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 Z: ~$ O8 e. ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 i1 V% ?, ^5 hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. K- ?: h$ P1 T/ W# q/ d

$ W, |) |# @1 ?9 o/* create a logger instance */) D+ g" L! ], s! W: {) v+ h" x6 B$ l
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- C2 n4 N% P0 ]8 P$ A' @
var loggerBufP = new LoggerBuf.Params();
6 T5 j! I# u% d  t8 lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ D4 L- V( W2 ?; ~( K, jloggerBufP.bufType = LoggerBuf.BufType_FIXED;" o5 y  B8 a: T
, z5 w2 |% w5 A5 g" q) ]
var appLogger = LoggerBuf.create(loggerBufP);
+ w! R7 [1 G' D3 Y# v& fappLogger.instance.name = "AppLog_Core1";; g0 w0 P3 P8 Y; a' l- Z6 g3 i
Defaults.common$.logger = appLogger;
9 F; V- ?. H1 l, {3 MMemory.defaultHeapSize = 0x8192;   
# h. _- A/ ], U& JIdle.idleFxns[0] = "&LEDStatus";
5 V8 S. I' {( W1 I+ ]' sCache.initSize.l2Size = Cache.L2Size_32K;
: B" e: }5 W& B8 x- J/ Y' }
1 G- n) I0 s, ~: ]% @
回复 支持 反对

使用道具 举报

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 */
+ e* L/ q+ `+ q0 f2 @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, p9 @: B1 h7 `
var heapMemParams = new HeapMem.Params();, g+ n+ g( e7 `( {
heapMemParams.size = 0x4000;4 @9 L* u9 }7 o! a4 C: r9 b" D8 ?* o( I

1 n9 E, s. R, v" pvar Memory = xdc.useModule('xdc.runtime.Memory');
1 o4 ^( d9 R( LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. d! |9 A2 F: ^5 z+ p$ ?* z- x& a9 F) B9 d
我大约calloc  每次共计大小为5K*16bits,& T0 O  S3 ~5 y  X
而默认配置才0x4000、需要改大。# f. Q( p! J3 }$ ^
% Y- F9 K, e& s- ?) L, T2 S: L8 t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 G( r$ ]8 L9 tProgram.heap = 0;$ y  k4 K5 p5 `' p. e( U
Program.argSize = 100;  /* minimum size */
( K+ K9 T0 y& b4 f5 j9 z7 w" J! W- uProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 00:45 , Processed in 0.046025 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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