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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ {- h5 ^2 [  o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 p) ]7 b* B- M& d! Z" o, @' n
  d7 }& A7 K% ]1 k+ c; s7 A其他程序段。。。。。
; s9 \+ Q) N3 f* z' N3 v+ X
0 @7 i# q% T; E  g   free(x_d);
. J- P: W' ~# _' E0 P/ y" ?$ X  \3 g- Y3 {
使用DSP侧单独调试功能,验证动态申请没有问题,
$ P/ i0 e0 g3 g/ c0 M
0 F  d8 X) b7 a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 j, |6 {8 l" R  x" ^8 w  J7 \

6 Y) S& o: u1 }6 I2 @( m3 x
5 f+ F- b4 D  h9 n& v' A  M' H& k) B% \

7 B/ \  j1 H  [
8 y! D+ S6 f5 i* ^: C2 Y- h  F' Q1 r2 z4 E' ~/ z' A# `
5 g* U# R/ u* y0 E/ f
! x3 M. p3 s; q* S( f% k2 [! i
' `  i3 F3 R9 k7 t; d& N$ y, W

; k4 p' _5 H- ]/ w) v" b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) C8 O. ^) O/ d- E5 d4 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 x, v" x3 F& h! I0 u8 D- B(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" ?4 ]! a! X" P' ]. |
! u4 W! J; T) E/ j
是不是需要在DSP.CFG中进行配置
) k/ d0 K0 ]0 V, _, I3 t$ V# ]我现在的配置为+ P9 u" y) @1 n7 V& x
3 E: c; l7 Q" }, \/ l5 a, I# b, l+ b
/*
* I& r' Z/ ]. P1 J *  ======== Operating System Configuration ========# ~& p+ a- i  L# L; k2 A5 J
*/4 T7 _, _' K" Q( i# P

3 ?+ @: h2 E8 Z/* no rts heap */
2 s# o& Z7 Q. _( D- t) zProgram.heap = 0;
7 l6 x8 g3 W! ?& j0 y+ hProgram.argSize = 100;  /* minimum size */1 w4 \$ ?, \3 E5 z$ }! r1 t) Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& B2 ~! f8 w: v4 c' h3 d" S
- V: _3 }$ a' e$ V+ l* R
/* create a default heap */7 n0 B- C7 j8 ?" n  a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 a. {, ]: R3 o
var heapMemParams = new HeapMem.Params();
& s# R! L3 z9 `# p2 hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! U4 b/ E6 y4 D6 _" ~4 K, {$ I+ Q; \5 [& ?
var Memory = xdc.useModule('xdc.runtime.Memory');4 E6 ]4 f- o: w; z* k, c) y5 ]4 Z2 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# l: O! `+ H& Y" L' j

2 n. L% }9 v2 G9 C% U/* configure System module */
- E5 F6 V- o- j  X; @1 wvar SysMin = xdc.useModule('xdc.runtime.SysMin');: S# n9 E9 o: [$ c8 w+ D
SysMin.bufSize = 0x1000;1 _2 J* l3 g$ s: v/ ^9 n6 O
SysMin.flushAtExit = false;
3 M* W# v* A$ V% Q$ R% J* I! H- i2 Z. Q$ J+ z
var System = xdc.useModule('xdc.runtime.System');
8 h. }6 s& z4 [9 j% }System.SupportProxy = SysMin;. O7 ^) @/ b. w, T

' A* r  R1 y* t/* configure SysBios to use the lower half of Timer 1 */0 E# J3 {- q! M8 b0 s# x1 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 h2 X0 q) Z) L0 R" F7 Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 y" R+ q' C  e! U/ K" C
Timer.timerSettings[1].master = true;
* o0 ]+ l. J% _$ s! V% R/ |Timer.defaultHalf = Timer.Half_LOWER;
5 w. p! @. [  JClock.timerId = 1;
  B/ ~4 K4 |( t* ~
' z4 d' k9 f& C# N
9 M' h$ r4 o" A& J( z  F( w9 r. b/*
0 e6 }& o( h0 M( p- F5 Q' o1 c *  ======== Miscellaneous Configuration ========
, y8 N3 z# o' Q& K  ^* a( Y$ l */
( @  }$ I, u# O1 n/ \: I1 v* L  l/ r, {
/* set default diags mask */5 I+ I- z% `# F7 x8 U% h* {
var Diags = xdc.useModule('xdc.runtime.Diags');
9 Q. c, R2 q" w2 o$ Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');% i& I& T; s4 ]3 O, n1 O7 ^( @# S

0 _- T5 X1 K  k3 Z; Z2 wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! ^  x; J2 h7 k* E, g8 }7 H: X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 J+ C1 f$ m2 D# S6 y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* d. Q. o3 X: k9 eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 L* Z  \1 N8 K7 Z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  m, e6 {$ W3 C6 s1 U5 F5 _- \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 C8 G- S( l- ?# S; H0 Y. |  zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) W7 P3 a2 _: G( h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ P: g" g4 O, e) j0 L  n: D' o& v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 T0 {) T9 G8 @  k/ i  k& g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' Z) F* x) o) R% n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. X" \* ~4 U/ v- y8 N  r" o( W% @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ r) E' ^9 N! E* ^1 B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- O/ h: }1 j7 Y% ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 Y5 }5 _- _* j5 q" m

2 [3 h+ t! [9 z! b' t/* override diags mask for selected modules */
; I/ E0 i5 L2 E5 L" v$ w4 E) vxdc.useModule('xdc.runtime.Main');
, S( f- X/ @' a% e1 f$ [2 E) tDiags.setMaskMeta(" ]& O- r3 C& d1 C1 N. F
    "xdc.runtime.Main",
6 c6 ?0 \* O& p; a& A    Diags.ENTRY | Diags.EXIT | Diags.INFO,& B% D, [4 ?- N) T1 D
    Diags.RUNTIME_ON
9 y) z$ y5 H5 }/ r( c+ l. W);' U: K  M1 m. E$ c" T1 h+ M  l% p
5 _9 y- w0 D1 y2 Z: |6 d0 h) Y
var Registry = xdc.useModule('xdc.runtime.Registry');" E  {5 I" e: ]( X$ `; n' {: ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 k1 ^* k0 c# |/ K4 l  B0 eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 h0 n" d1 t  C/ ^5 ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% E( x, j' T" u- S$ nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* N* r" W8 X) ]+ e5 a7 V- |
. ]' i! M  i, B8 x  W0 i% \
/* create a logger instance */
4 d# x, n3 Y1 B+ b8 P* Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# i& H% j% a. x! F2 v  evar loggerBufP = new LoggerBuf.Params();) ?9 u& ^' z8 @# c+ B$ A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; C) X. O" N) J/ F- `9 \' [& N5 qloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' f% J7 b% P  }3 U' }% {  q
5 V" Q! t/ e$ dvar appLogger = LoggerBuf.create(loggerBufP);3 g) G  a) P- D; W* G" g4 k" c
appLogger.instance.name = "AppLog_Core1";6 h& z5 j- z$ G7 i, n  A
Defaults.common$.logger = appLogger;) ^( Q$ j% D# ^  ?
Memory.defaultHeapSize = 0x8192;    ) j( B  [' |, [+ B$ Q
Idle.idleFxns[0] = "&LEDStatus";+ _/ y( U+ p% l) L8 r8 e/ ?
Cache.initSize.l2Size = Cache.L2Size_32K;8 l- ^. k! p# M7 [" V* l

# S% ~& P3 J/ S1 w, K, x9 E# O
回复 支持 反对

使用道具 举报

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 */. R. k/ G4 F+ q. Y# ]* a) L- a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 |* Z+ t0 r$ n+ {! {var heapMemParams = new HeapMem.Params();
  Y% l: m: h  a/ F  H/ n' lheapMemParams.size = 0x4000;$ a2 a* C4 B2 v

$ T! d: f6 Q3 H4 R; bvar Memory = xdc.useModule('xdc.runtime.Memory');
: m& Z: K# d& i0 k& sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  h3 P4 d. q. O& l3 L$ `+ l# z1 n
7 r1 c/ }' ^' v' H% {. a8 Q, `
我大约calloc  每次共计大小为5K*16bits,/ ^8 P8 t7 t: Q5 l) l
而默认配置才0x4000、需要改大。
' {( {  }) O  |! b% S0 U* V( ^, F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 D" k4 J# C, Z% D
Program.heap = 0;) u) Z, _; c' v, D
Program.argSize = 100;  /* minimum size */
! x) U- z. o3 k) F$ ?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-18 17:57 , Processed in 0.042256 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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