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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 T+ U  H$ y8 Z5 C; x1 N' g
. T, z6 j  H) Z/ [0 A+ T( W! ~7 x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  v! [( Z' k) [2 Q6 ~- }
' y, x+ Y$ ]$ C) p# Z
其他程序段。。。。。
' ~$ V/ D& W, T4 j1 q5 V3 Q; l2 U' I 9 n& T2 J8 \2 L3 H9 i1 C
   free(x_d);
0 h- U3 O+ p+ T) |# E4 ]" Y2 t, a* L; n& W
使用DSP侧单独调试功能,验证动态申请没有问题,+ d9 v) `7 w" n6 x

! F; F3 [* H+ I) ?6 n  G  j7 m4 `$ s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# z5 E% H5 i% m5 `5 _( q* u

0 F/ s/ b$ V& F$ R3 q5 K% _  s3 k& H5 G0 V

  @4 s0 H- k( w. p9 \
; O7 X6 w' h5 j0 K2 A; ]+ h6 e6 O
; J$ N/ H  \) e* ?" b* M* R
& u# \, r1 D7 b" p
5 G* d/ W  S( z0 M+ L0 n% y0 {
2 z7 a' n: r8 ~; I. g0 h6 h
2 X7 U2 f! ]2 G0 n" ~
$ T" |* @2 Z' m: Y* h+ K4 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 ?; ?6 C5 J/ R- q8 r5 S" N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' X6 d# k( e+ u1 J8 N9 L, c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" C( ~, R+ g; I0 t/ F6 H' v

1 T7 e5 S( Z( G是不是需要在DSP.CFG中进行配置+ g" G5 S" d/ B
我现在的配置为8 P, V8 s' o2 C2 z2 h! E
3 k' [5 c$ n. W5 S
/*
& L5 I1 @' Z0 p: a- S* t *  ======== Operating System Configuration ========
) R" g3 M- h  j1 T */
# q- A/ @* x' d! H8 Y3 x' a/ i* `  z& k. L' g, q
/* no rts heap */+ `# F+ B- r- X' v
Program.heap = 0;; g: L# @" N' C; p3 u! @8 h# H# E! k
Program.argSize = 100;  /* minimum size */3 E7 }7 q# Z+ J4 h2 F3 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ x4 f# B$ D2 z, `( B9 Z( x7 \1 I/ Y# p: c' W: m  X
/* create a default heap */
$ v$ r6 h  R* k$ J8 ^; D  Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, d5 [; |% R0 |' l. t) b+ E6 E( j# Qvar heapMemParams = new HeapMem.Params();
& N9 Q7 q. \% C6 {% k9 Z+ N  mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& r, r0 T1 m" i* ^  w- T1 m9 T# Q6 _0 D9 b- I
var Memory = xdc.useModule('xdc.runtime.Memory');
) B  G6 u7 G% a" D$ K/ W  R- S. EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 N$ X( V' Q$ w( n) O) i

6 V' n/ Y- t% F  P! C/* configure System module */6 a' F4 G6 S3 O1 I
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, b3 u3 s6 b/ \! E" s6 JSysMin.bufSize = 0x1000;: }# m* G( e8 F" d7 R5 s: [7 p0 O
SysMin.flushAtExit = false;. s; h: j% S5 Z. o1 H8 {
2 D, v3 e' ~. U: O7 [0 j
var System = xdc.useModule('xdc.runtime.System');
/ @1 B& ~6 v7 U7 |- Q/ x/ k  jSystem.SupportProxy = SysMin;
: h4 M: x$ X. B7 f! [1 H- u+ N4 Y  s
/* configure SysBios to use the lower half of Timer 1 */7 U6 B1 Y1 D1 _! I& r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ @/ z3 x+ K  @+ L# [. jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: F3 Y& v+ w, iTimer.timerSettings[1].master = true;
& L/ P0 N$ Z6 \- W& ZTimer.defaultHalf = Timer.Half_LOWER;% R  e. D: s" l
Clock.timerId = 1;* L* U) t% w& u* ?& p! x% u  K
, V/ a, m% h8 O7 T; E
# t& l7 @9 F4 x/ j$ d9 {
/*
5 y3 ?  j+ a5 |+ o *  ======== Miscellaneous Configuration ========
  h3 g6 g" d* _7 D+ g7 W0 _ */! R3 J+ V3 x' |  e: p" q0 G

& w, f2 u( ?. g  z6 u  ]/* set default diags mask */  y2 b) Z- {) z- m9 l6 n
var Diags = xdc.useModule('xdc.runtime.Diags');
! y( }% ^( X) @5 U' @5 evar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 |9 q9 a1 o- Q/ X5 z- s0 A6 |8 O5 \3 _8 ]2 F% |8 f  e3 ~" ]
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 H& l: c5 ]. y1 tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) R7 \% c6 X" ^2 V6 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& V! w- m6 ]0 r; S0 x+ |4 V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* @( r4 k% ~& g* j& h: {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 I5 k( ^5 V: {# g, ?$ l  ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ k8 L) w* b: q8 b; mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! D8 k/ i: E& p5 t  X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 b& r$ o, `/ S3 }' S: T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 o- k) j5 k: f' L+ A" q& Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 ]$ U2 a& n2 H, V& d( }: {% j- ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% m! ?1 z' R+ ~, W+ S9 _: JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 Q0 `2 k* o# P" y) }- a& R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; l8 t$ u2 q4 @( a7 WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ ~9 v# K, w- b0 g6 O! r

: @% ?- D7 ]& M& ?, E/ N% y/* override diags mask for selected modules */5 I' @: b" a4 b8 A: h
xdc.useModule('xdc.runtime.Main');
6 U& q+ e. Q1 D  c# @+ Y# DDiags.setMaskMeta(
8 O9 w& i. W! [( ^  y* R' o& v! }    "xdc.runtime.Main",
) ]4 J- N5 q. J5 |5 |, d4 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- g6 ?4 b; k) K( {& D/ R% q9 u& q    Diags.RUNTIME_ON
3 y( b; ~5 a9 q: D7 D);
7 L9 M$ t9 ?  k9 Q, `( ^& l
2 P, E' E4 J. b% N) Z7 {var Registry = xdc.useModule('xdc.runtime.Registry');
: I' V+ l4 N! Q- @' _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& P) y  G1 f3 x/ u. wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 I! [" ~# V4 b) x. `" r. A- x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) u$ }- Q1 ^' L  O# M4 r2 g1 F5 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: D- Z- x" ?$ _0 g8 g& d6 u
2 O2 P$ o6 L$ H+ e
/* create a logger instance */
5 h! z- J* _! N8 e/ Y$ evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 n) N8 T+ K8 ]- V: u6 j4 C' ?. K7 g
var loggerBufP = new LoggerBuf.Params();; K2 @% y, V, P4 Z- {3 L8 M& T! S2 H" Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. S6 h5 s6 E/ Q' y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 }: \6 u# `( i; l. o
- `* p6 Q  d0 ^- r
var appLogger = LoggerBuf.create(loggerBufP);- g/ |7 r3 _+ N: ?; V. [  y" p. B
appLogger.instance.name = "AppLog_Core1";
& S& @; H5 \1 [5 r2 G0 j  YDefaults.common$.logger = appLogger;
/ ^7 l5 r6 W* X; A& U0 h, w  KMemory.defaultHeapSize = 0x8192;    + t; K+ b- `8 p1 j
Idle.idleFxns[0] = "&LEDStatus";( @7 I( L3 d) I* j" l  u
Cache.initSize.l2Size = Cache.L2Size_32K;2 Y$ @9 D( {" f& d8 ?
2 ~6 i7 R$ l! G  o% w6 ]$ f  d
回复 支持 反对

使用道具 举报

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 */
& B1 f' t$ r# A/ Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 K4 o1 f7 _3 {' p! Z2 e- `var heapMemParams = new HeapMem.Params();
2 M* p0 v" V! ]) h  |' BheapMemParams.size = 0x4000;
' l" z0 Y& A! N0 e6 _' T5 @1 Y& v7 j; T( \9 x
var Memory = xdc.useModule('xdc.runtime.Memory');
' g3 I2 J7 F2 `  H$ PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 w. L: ~  \$ P% q' {
+ c, T3 Y9 R' }0 L8 H3 w我大约calloc  每次共计大小为5K*16bits,. r1 Y5 v2 X& l# Z5 P
而默认配置才0x4000、需要改大。+ ?9 @3 y6 Y1 j8 O6 @/ S; V
) k0 V5 o- B& k" ?1 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* a% ]# F7 A: }1 K( X- v( y; G# n
Program.heap = 0;
/ j  @' ~! T7 KProgram.argSize = 100;  /* minimum size */
1 M, S: W) `; p6 J+ XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 13:26 , Processed in 0.047866 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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