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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, x/ J$ ], S" [; o& W. D3 o3 e! j0 i2 w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 o5 y& C3 @3 s% }6 y- S

, Z5 o! @: q; l2 g, f3 z其他程序段。。。。。
0 i' z9 q+ D! N) }, O : q, ~7 _' I6 K+ p1 x- o
   free(x_d);5 p5 ~1 d1 Z# }" l6 U9 o9 }% |

+ G/ N6 S. z3 s使用DSP侧单独调试功能,验证动态申请没有问题,6 S! V6 x0 x. }9 u% ^% k
$ @& J( E& q& Y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: j- l7 g. ]' O
- w* J: a7 q. B* }

4 j8 R" D# }' ~7 m0 a" a" m' R4 e1 r! U/ l
, Z3 ?0 J% u* Y7 w- O0 Z4 h" M

6 m; n8 m+ O- {* t1 {- j1 V9 Y
+ Y1 X) H! v% p# A
! m! @* |& E7 d+ S- M: O) M3 I! v' u  A2 o! q- C% B
. e9 c2 l/ q3 ~4 o! [6 A

% e/ K0 x! n4 \& @7 V6 M. ^7 {1 l2 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 r# C  j" p* w, @5 V" T/ A6 m' T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ z% _3 u* v( c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" p: ^% [) |$ F+ O

$ U7 @& s- x* c是不是需要在DSP.CFG中进行配置. |% C6 W. V. @" ]( G" H3 _: w
我现在的配置为$ K) P1 o4 H4 n: m

( v) M/ i  R5 P& o% m4 n, d/*
1 C2 ]% c; e+ B: {) W% k$ o' Q1 X *  ======== Operating System Configuration ========
  |9 x( \4 C- Z. C/ q */0 s* |4 U/ M- I
2 s" b, X1 [& ?6 D; B- L4 ~
/* no rts heap */
* l6 i5 B) q% x3 C1 ?$ gProgram.heap = 0;
' b3 M3 z1 C% X$ U; z. o) GProgram.argSize = 100;  /* minimum size */
" I/ j& j4 c/ S, BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# X: S' b, l2 P4 i6 o( P! h: Z

7 ]$ R, D3 V9 V9 F/* create a default heap */
9 }5 f& G  S! M8 f6 n0 P! p, Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* v7 R2 N1 Q( e* A) J& S. e# \$ Qvar heapMemParams = new HeapMem.Params();
# g- X, B$ q( C3 @' EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) U+ a% s+ F7 t% N
7 L. Q' x0 G# y1 p; {6 o
var Memory = xdc.useModule('xdc.runtime.Memory');
4 c' F# V0 G! o- x! v+ B0 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( t2 C8 l9 ~9 ]! s# W5 _( y) U+ o9 U, F* |
/* configure System module */! U! L0 E9 b; K5 S1 h* Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');# r9 n/ o- J2 z6 m* Y
SysMin.bufSize = 0x1000;9 |* J3 Q6 \$ Y  h+ c. b0 d0 f
SysMin.flushAtExit = false;
! h% d: K* {4 y' t: v% r
3 T5 Z# R" E4 ?. m, V5 |3 U" s  `var System = xdc.useModule('xdc.runtime.System');; F# I; O' M8 v) h- \: G0 \7 N
System.SupportProxy = SysMin;
1 l, i$ v- M6 Q. ~# u& x2 F  v* I' J  J, R: Y& r7 h( `1 c; _
/* configure SysBios to use the lower half of Timer 1 */
9 |- M# l7 Y  T8 M' B- Y) H8 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* P/ C9 b& m5 U' s) x% j* y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( W1 w4 x4 B3 a7 a
Timer.timerSettings[1].master = true;4 a7 \7 _  n) \2 w4 [6 w+ l
Timer.defaultHalf = Timer.Half_LOWER;5 I* u3 U, Z8 g% _3 {; o) l8 A
Clock.timerId = 1;' n, Y- ~0 [* E! @, W3 i4 D
* k- l9 G' @- R/ S# m/ k

* O9 |/ U; f. j2 M9 @/*3 C0 L+ c7 R4 L5 z# M* |
*  ======== Miscellaneous Configuration ========
+ I- E5 v9 q3 E */, R3 ]/ B4 g7 i1 z

' e# L; X6 q" b7 N1 q) Z/* set default diags mask */0 v; q/ O# B: c1 P4 V& y
var Diags = xdc.useModule('xdc.runtime.Diags');
4 S: P+ o3 e8 `2 e8 ~( Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, |3 X8 n( V9 B( z4 i+ q" u8 ^0 ^4 e+ s- E. e4 _7 w! @) p( ~" ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, q( n1 i& w# s# w# X7 T/ ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" ]8 ^2 a8 i- ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 v7 U: F0 |" `4 a  K7 _( m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 D" K2 v3 N" `4 C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; d; |: i  J- w5 J) nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 ]; S* i) e: W! M7 k' HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 c5 g) g' N+ bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. U3 w* K3 [7 h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 E1 X9 k8 ~$ U2 j$ yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' L- V7 G9 [0 \, G$ k  k5 Q  UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  L" s6 Z; n% I) c7 g! N5 V8 `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 p/ N. l8 ?. J. [( N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. x4 v, P6 Y% Q9 [9 T  Q; }! CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 B. \9 L: J" |4 Q$ T) `- x
. `) b3 V" O9 D& _! K0 i/* override diags mask for selected modules */
4 m9 z2 n$ n: @4 Oxdc.useModule('xdc.runtime.Main');6 i% S8 M3 v1 m. a0 K7 {8 e
Diags.setMaskMeta(
! j: N1 Q% U7 w    "xdc.runtime.Main",
8 c: G! o8 v4 R$ }    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 h; ]% H5 N8 L4 h! u4 c1 v# z
    Diags.RUNTIME_ON
4 A9 G9 {9 h# {9 z% y) L, Y& _);
- f, y, G0 W  t( s1 X% f5 h
% Z& f* i, b7 \& Cvar Registry = xdc.useModule('xdc.runtime.Registry');3 ]' ]0 f2 o+ l$ q, O; m2 L; F0 C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 G+ U# {% F0 }" m, ?8 L4 CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 D2 p1 q8 h" a* g: M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' {8 N# i! ?9 P2 G1 N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 Z, ]$ d1 T2 s4 w

' w4 M0 [9 r# l, g% e) }/* create a logger instance */( ]# L6 p3 i7 ^2 q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ E: s: f# V' j  }/ avar loggerBufP = new LoggerBuf.Params();# r  {/ d8 K  _) P! v9 g/ X2 W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: Y7 [0 i* U) r# h+ F, [& B! J& g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 N- p3 q& R# w" x

9 j/ ~6 D) T/ d8 @  Wvar appLogger = LoggerBuf.create(loggerBufP);* U% C& l+ l$ o5 O6 O
appLogger.instance.name = "AppLog_Core1";! m* \- R% x; {) l  B- s! }* i
Defaults.common$.logger = appLogger;5 U! U5 F: Z$ I2 o2 s. i
Memory.defaultHeapSize = 0x8192;    ; Q: a! s7 X) p
Idle.idleFxns[0] = "&LEDStatus";, i8 ^$ V) w- C& G8 k
Cache.initSize.l2Size = Cache.L2Size_32K;8 d( C5 E* @2 s
$ v2 F$ G$ T6 N& |% 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 */
. B* c* t/ `- Q7 f% _1 y+ `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& e' g% V1 |! p$ Z& u* q9 U
var heapMemParams = new HeapMem.Params();
* T" X& n2 P1 E. D4 ?( V  aheapMemParams.size = 0x4000;4 ?/ \* l8 }9 i' p. {# O4 }
! D  w! o' u8 h
var Memory = xdc.useModule('xdc.runtime.Memory');
0 a5 C9 x* u( c# o" N7 w" d" {- ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: [$ X' C9 W, U' e
  a# W2 g. d3 ^% k$ l" Z9 m: ~7 C
我大约calloc  每次共计大小为5K*16bits,
3 a/ e: v: C7 g% b: X而默认配置才0x4000、需要改大。
( \8 T" z8 i' @! O% p( v2 Z6 J0 G3 G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: p. L. d- _4 c( O: CProgram.heap = 0;- m3 t" s5 G+ c+ g4 K0 T  j
Program.argSize = 100;  /* minimum size */) ?( N' @" S0 e; F, I  l
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-17 02:45 , Processed in 0.048508 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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