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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 K; F) }- z7 t- B" Y
- R, f6 g8 }9 e, j! m- Y9 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: S* G6 y, I8 e7 f

6 q6 @* L. \% j# H) \9 r其他程序段。。。。。
6 w9 Q7 X( A5 F- U* Y8 E/ o
$ j0 Y( H- c/ d% [% ?! S: `# V: u   free(x_d);9 v# v6 |+ z, R, e
% d+ @( s( L! W" k
使用DSP侧单独调试功能,验证动态申请没有问题,0 l* w5 b- z1 y* i! H2 @& _2 c8 i
0 @5 K6 j; D7 V  t5 v* w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 q6 j4 \& _1 W9 P4 i, @9 ?/ o

7 I) Y- i5 Y3 z; p% `
1 H1 K4 ?3 C1 X$ O- _$ r4 b0 Z& |; ]/ _% g+ V4 ]

1 F) [& ~8 e0 l" j2 |6 I2 _, W; p# W" P, z# i( y/ ^% ~3 {

4 e7 s2 @* Z; u( c( A( Q7 f' g
( W/ ?2 P; a9 N4 M4 D! v2 y" y& L2 p& ]

1 i/ K- Z' ]+ ~
7 a" R& V& W6 s" `" X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# ?  G- _) j, Y# u; R我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' r9 ^- n+ [- q: {! K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 `" o8 c3 t  R% ~, g
+ L% M5 @( x- F% q1 Y
是不是需要在DSP.CFG中进行配置6 W" _9 ^; Z7 s; c2 O1 w
我现在的配置为+ s, T+ d  c* Y5 @: f3 f
9 A( |3 J# }' [9 w0 d8 D2 i; e
/*
  n5 V( s% o' |  t  r; W *  ======== Operating System Configuration ========
0 _: x; j5 H/ h# I */1 C+ F& A7 }9 b" X% W) }' v
8 L9 w' R3 m3 E' q+ f! a
/* no rts heap */
9 B; B) X% s/ P  b& n7 Y. gProgram.heap = 0;
! G' j1 o2 d* Y0 o7 a0 T" mProgram.argSize = 100;  /* minimum size */
- o% U4 T5 q4 d4 U! rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ `( B; x/ z8 k% L+ w  T# g! M
1 X* l' x& H3 d/ r( Z/* create a default heap */
4 Q2 g- v7 o( p1 m5 f- s* I# }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ [6 i* A" g# ~. m9 _" q6 P6 N( kvar heapMemParams = new HeapMem.Params();9 `. J8 y1 \6 s7 |
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& [* o0 U% x+ ?6 i
& n1 P! t( G$ ^8 m' H
var Memory = xdc.useModule('xdc.runtime.Memory');
6 P2 Z8 b  T. q; |1 G  R" {- HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 R( C: h- u9 q
4 Q6 c" X+ A& E; P1 X/* configure System module */
, x* I! L: N9 b/ C3 Y4 j2 H7 o, P* q0 fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
+ b! [2 {' e1 S# ]6 p/ cSysMin.bufSize = 0x1000;/ E0 G5 t3 b6 V) W3 e) g* s
SysMin.flushAtExit = false;7 p. X8 i3 ?! [' `2 {( Y9 O# A* h

: }/ }3 v# d: ]$ D$ Tvar System = xdc.useModule('xdc.runtime.System');' A  O& S. J& V2 e: u
System.SupportProxy = SysMin;- O+ O2 E$ l3 e
8 t6 x' m( m' K- j* q7 w1 j' U
/* configure SysBios to use the lower half of Timer 1 */8 g/ v2 K! Y6 K! G) p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 [2 l2 e" [: s: Y% l) X/ a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 f% V7 `& S0 W8 v/ W- i& QTimer.timerSettings[1].master = true;6 W( Y" r* F! z, O
Timer.defaultHalf = Timer.Half_LOWER;
( i% L: t& ?8 ~/ o& [3 O+ Z* iClock.timerId = 1;5 u  b0 F* M4 K+ y! \) X8 ]

1 W+ u( S% H- V$ r5 D. f" }3 L$ E# V: d9 Q
/*
# f" n- t7 J! x5 [) ^! K6 A. ?5 l *  ======== Miscellaneous Configuration ========8 ^) C; ~. U. z( G& V
*/
, O5 w& z( M  i6 u+ o: e$ [7 O( i  ]. O  t" J  {
/* set default diags mask */
8 n) q6 B6 O( o* L4 Svar Diags = xdc.useModule('xdc.runtime.Diags');7 e' j/ T" {1 A# {0 X
var Defaults = xdc.useModule('xdc.runtime.Defaults');# t4 q  _* o! r) |
0 W- T8 |) b* I& {; u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 {% e  _! t" ?$ m4 C' dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ x  [" V" k0 r  W4 JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  E1 y( B! E9 M7 Q8 oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 ^9 m6 t1 K) D; k
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// [" m, ^) {6 z. k6 I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 A. `; T7 }  C+ LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- u- n* |9 v1 ~" Y7 \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; l" f6 h: U3 W4 @5 C3 o# _$ P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- K, J/ ~9 K- u! H6 `0 K3 d
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! O  s" D: y2 Z* F" hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 M  K3 X) y6 S8 |4 r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% [9 O% }7 I6 ]( {6 b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 c" `4 ^( F7 ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 @* c6 {& v/ I- d& h  d
) e  N, D$ [" @! E4 p/ g  O
/* override diags mask for selected modules */
0 |( T! O8 r3 |  f. S% r, xxdc.useModule('xdc.runtime.Main');) r" j, x- I6 g) l
Diags.setMaskMeta(" [' n) f. R) i3 h7 u# c9 w
    "xdc.runtime.Main",
* u' X, V/ I, L0 i; z    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* I; {0 _2 T, L# ^    Diags.RUNTIME_ON/ \! g" h' j! n) r! B3 |
);
" t, n: R: m+ s$ s
; O% n# Y# O2 J/ E& \2 Z+ Bvar Registry = xdc.useModule('xdc.runtime.Registry');2 v  F' k! ^, W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' d6 g+ |5 G9 n6 g2 Z4 x8 G$ O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ E# v4 w+ E$ C4 O8 M& X. kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# M* M8 m  e, t$ Y/ r. |Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 o8 h1 d  \& @% b
9 x, S  u! Q6 z# p; a4 ?
/* create a logger instance */
( Y0 X1 C. N  L7 I/ O7 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! S# ]: V) ~$ q* x5 d' ?: evar loggerBufP = new LoggerBuf.Params();, P# g) R2 w' |) i1 y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; b! G' V' d9 n! I. t9 n$ ]/ BloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 s1 g; H1 f* @& j
* G! P" z4 o- Q# U
var appLogger = LoggerBuf.create(loggerBufP);3 p! m$ X# I. U* x9 E
appLogger.instance.name = "AppLog_Core1";6 c3 }9 P( j/ ]6 u
Defaults.common$.logger = appLogger;
) y) b2 r4 P7 b, O9 BMemory.defaultHeapSize = 0x8192;    1 R  U  l$ \) k5 a. u
Idle.idleFxns[0] = "&LEDStatus";
8 w* N* |# n1 NCache.initSize.l2Size = Cache.L2Size_32K;
) M# n! S0 g4 P: G$ n% z1 H; w1 o0 D' g+ J
回复 支持 反对

使用道具 举报

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 */' h5 _5 d) i5 D  M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: m1 d- ?4 b8 a" ^3 svar heapMemParams = new HeapMem.Params();
3 K* q$ w+ H" R, B: Q$ b: @' B3 xheapMemParams.size = 0x4000;
, A9 E* e$ j; ~0 k7 j
4 J2 n7 i1 _1 W) mvar Memory = xdc.useModule('xdc.runtime.Memory');
5 V0 [$ r1 W, i; J: j. YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 k) X) |& o2 U5 w" R* }: M
# d4 ~% j% Y" Q; }! a% m; S9 L我大约calloc  每次共计大小为5K*16bits,
( Q. D7 e* M1 }( Z  l6 [9 k, C- j而默认配置才0x4000、需要改大。: i3 l0 s$ \3 b& Q
( ?5 M  g. h5 B2 |! Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* T5 `, Z/ \& n
Program.heap = 0;
, f" d7 C! b. P2 A/ [Program.argSize = 100;  /* minimum size */
$ @. L( w1 i1 k1 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 22:04 , Processed in 0.045735 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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