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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 c  D4 v4 j6 q  b  f3 o" u! q9 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- K, X2 K! ^# p3 N7 U
' ^+ }4 R8 h$ o9 H
其他程序段。。。。。
  K% n$ ~$ B% Q" d: z , S1 {1 J4 b$ ?' S
   free(x_d);
% D: J! |4 }2 N  ~$ b' u6 a
) W6 N  ~4 ?" c7 `4 H使用DSP侧单独调试功能,验证动态申请没有问题,  T0 P. S6 k  T# U) X6 b/ x

0 q$ B7 |/ U2 p8 t+ h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 v, h! A4 g- T' ]8 e- d

. S: I4 k9 Z" g
1 A; o' B& k" W3 G  r9 @; i% b; S# f# S; {
* G1 u- \8 x7 A# `* @7 T5 J
8 `4 I2 C- r3 r2 [9 Z
! L& |0 }8 R. L* S  U

6 J* J2 \# d3 b7 j8 O8 T( S& \( R: C" a
! `' x  }, w, b; K# f

* A& }3 a# U; [/ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: g! I+ u* s7 @* }) \& t" |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  w! Y) m. U5 S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! G7 z" n) o; J4 ~
# v% y2 \" Z/ A: w  w0 k9 J( t
是不是需要在DSP.CFG中进行配置# ^' B" C9 W% K& k( C
我现在的配置为% n9 ?. P1 E: o% h
4 p+ X+ {. A! m* G$ ~
/*
* e6 {4 M) j. h' i$ ~ *  ======== Operating System Configuration ========
1 g1 j5 s# q* q, ^+ b4 D  C* i! q- W */
" {+ [- Z8 |7 I0 r6 p0 b: \' M" ]# T; d/ K0 t" P
/* no rts heap */
3 a7 \: ~7 ~1 _2 C5 a* X; TProgram.heap = 0;- z! T3 Q5 y7 D. c- k/ Q$ m
Program.argSize = 100;  /* minimum size */7 j) \& ^7 U" e: S# M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- p' M8 ]  y$ B7 w$ E, K2 Y: ^
. i" j3 W5 Z& D; V, v0 C) W
/* create a default heap */
) l* g9 }7 T$ g% yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 G/ m+ D5 G( Y$ O6 }
var heapMemParams = new HeapMem.Params();; ^" t/ {% h/ I2 m4 Y& q+ p7 u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  x8 W" d: B- \5 l* F. n1 D( d
" [8 a) {8 Z# e  k( I; e
var Memory = xdc.useModule('xdc.runtime.Memory');+ w5 f5 m4 j0 l' F+ h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! S3 |  F. V9 ?  n. P4 o( Z3 h8 a
( p# E7 G/ I5 |/* configure System module */2 k4 e( [1 B# C" D, P7 x8 g
var SysMin = xdc.useModule('xdc.runtime.SysMin');) j! |  C5 m; `# _
SysMin.bufSize = 0x1000;8 w- ^0 C& [" q3 C  z. S% @
SysMin.flushAtExit = false;, h5 A# Q) |7 ~; A
$ L1 B: ~$ [" Z( `! l+ g1 @( ^
var System = xdc.useModule('xdc.runtime.System');
6 z' j+ |! {% U* N7 J5 jSystem.SupportProxy = SysMin;
& p2 p1 T$ K5 V
+ y( y+ s& Y! c/ ~/* configure SysBios to use the lower half of Timer 1 */
' D% R. O/ o$ U& Z$ l4 Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ l9 m" @  Q9 A% {9 h# E5 ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 H4 C, J0 E/ j7 e& f
Timer.timerSettings[1].master = true;
/ A  i, C$ J. T- A" p+ MTimer.defaultHalf = Timer.Half_LOWER;
4 F2 `! D. E4 |) E% @Clock.timerId = 1;
# M$ I3 R0 a# o! R# B. k9 N
5 p. \: g! j5 C& [
4 _; k9 Z+ G# M8 x9 [+ S1 m/*
; G( x  C/ ?- e0 M0 G *  ======== Miscellaneous Configuration ========
5 h" T" H9 u; b) J* E/ P+ k. U# m */
2 R4 Y9 K6 e6 g0 z4 P8 F' Z. |8 o* y2 L% o: @1 l; u9 j
/* set default diags mask */$ C5 X& T6 S' ?* j, c! v8 u( g
var Diags = xdc.useModule('xdc.runtime.Diags');
1 f6 z2 M! T9 X" d1 O, h, evar Defaults = xdc.useModule('xdc.runtime.Defaults');
( u& r; q" j  d/ d! J7 o2 q! E: n8 P% W8 M* f- U! N' k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 f( E% _, t% |6 R: y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& g/ `) u% q* X: t0 N7 W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; Q3 V* v. l. X4 Y2 y4 r, D7 M# g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" q* U& j, ~! L- ^# ]. K* \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 p0 ?6 \- n% l3 M9 C% Z$ v8 W2 T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ m7 `* h- h$ G* L$ v1 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  s# U2 g  @0 s7 f5 WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: ^0 B6 h1 f* z4 b4 X+ R5 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' r. f7 v  E  s  p9 vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( m0 N& L5 j# {, r* W. @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  k3 A2 W3 W9 D% U  k4 h# rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, ^; [1 ]7 F* ~2 J, w$ D' O$ X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 h  g, s; ]  L2 V! T) j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  O( ~& O1 ?+ L, e
% A- |" v; Q" W' G
/* override diags mask for selected modules */
5 j1 P0 r) I( d: m" z8 Ixdc.useModule('xdc.runtime.Main');# v# w1 G! `  F7 W/ o8 |
Diags.setMaskMeta($ w6 c7 `; _7 F" j
    "xdc.runtime.Main",
7 z! y- ]- ]& ?    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 Y$ h7 g& x. {/ x: |    Diags.RUNTIME_ON
" G8 d& o+ E0 M! _; {. |);" P3 f; N6 e0 y, Y+ ^( o9 j2 f

. R9 d, w" s3 M. p6 fvar Registry = xdc.useModule('xdc.runtime.Registry');
" H/ U' j( V, D6 `2 \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; H' Z7 H' j  [, ^2 D& D: N) K1 m  U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  M' n1 k, @0 \$ D9 Z; ~- f" M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 U* o& L- h2 N: H/ LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ C! [2 _- r6 Z9 J( _
' y% U: R# O6 u3 o/* create a logger instance */
+ @5 ?" V8 o( {; zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 U+ E( G+ y: _% ?* V  @
var loggerBufP = new LoggerBuf.Params();
" T: p2 X% g% P6 j6 r- r+ r9 IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 h1 z! K" ~+ ]% floggerBufP.bufType = LoggerBuf.BufType_FIXED;! K4 \( N/ a1 J" f7 @# j9 w

/ X. f4 v/ A( w' Q* `% v- Qvar appLogger = LoggerBuf.create(loggerBufP);8 D' `# A, x2 `! X! D) d( z  w* s
appLogger.instance.name = "AppLog_Core1";6 U+ @% \) [8 o* T5 |; Y
Defaults.common$.logger = appLogger;
0 o: A( ?; p( JMemory.defaultHeapSize = 0x8192;    8 m4 L. t9 O5 m+ l& ?0 K1 G
Idle.idleFxns[0] = "&LEDStatus";" {' M2 D% p6 M/ r
Cache.initSize.l2Size = Cache.L2Size_32K;
# x" F# Q; Y8 ^" \) }; C: l) ^- _7 j0 t4 `  v6 b
回复 支持 反对

使用道具 举报

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 */
/ A& U* B/ C6 W! @7 r2 S" `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( Y' _# t+ [" ^$ ~) @var heapMemParams = new HeapMem.Params();
+ U4 m6 F! E+ iheapMemParams.size = 0x4000;
6 T' ~! Z+ v' Y) @; G7 y) B, n: Q- V5 E8 S6 k9 N
var Memory = xdc.useModule('xdc.runtime.Memory');
2 w* F2 o2 J$ \3 c4 ^- A/ HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ X% y6 E% W1 L$ m# x4 h
8 k$ l1 O6 w5 d0 @/ T9 l
我大约calloc  每次共计大小为5K*16bits,( y; {5 `# _, {& J
而默认配置才0x4000、需要改大。8 Q$ @5 `3 W! v0 D
# V; ^5 f( s( W1 _# t0 k+ ~, }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 ]# Y. `- L- y8 Z# _3 d6 W1 Z( kProgram.heap = 0;# V" \# e+ H( ^2 K  G' m, {8 E, b
Program.argSize = 100;  /* minimum size */' }( _0 W+ d. F9 o# s5 w* S: y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 17:05 , Processed in 0.042820 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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