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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 w" _0 b3 _$ O, ~, ]
  Q6 M  l  D3 ]+ V3 a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ m4 k) p' h0 f7 z* l
* a' X, K% ^2 l. y1 n: C
其他程序段。。。。。
4 j1 o( C6 I" B5 t 6 R5 K/ I0 H' k, J( E- `3 F
   free(x_d);; z7 n) L% L1 x. N+ A

$ e% r% a+ q, K4 T7 H, [% V. [6 S. Y; Y使用DSP侧单独调试功能,验证动态申请没有问题,+ X" Y+ R& _, r( }* R, u4 h. k3 T  |
; p7 @6 K* {) \$ u
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 d' p4 W4 Z- i2 D4 u. E" z7 f

. z# g! ~4 w& o# e5 v6 `8 f2 V& X$ i. K" D1 T
3 ^# j+ `8 P0 H4 |# ]! C8 j. G+ H
# z: C9 l/ w* ]* E' J7 V5 E  W% }

8 I7 d9 U% |. O% O9 v8 w  q1 |- G) S$ k& _- c' _7 w! U4 I+ K

, q* ^6 |8 `8 w1 u4 m& |' p# B) t( T- u0 g# {% X6 b1 H

+ {6 g# h& N& V3 n% K9 B, y) ]' o& o- X: V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ @) \) X+ t0 B: w  J& _
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ ~, O+ k6 S: ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ p4 L  V4 O% z  s
7 Q9 ^) @7 X, D+ {+ h; _- k
是不是需要在DSP.CFG中进行配置
, i! e4 {7 X9 E( H/ `7 u我现在的配置为: ^) M' [) {) m+ U
# d- H3 P" h3 n; |" D
/*
4 Z5 P' l/ [$ [/ ]% k *  ======== Operating System Configuration ========4 @, s+ ]6 a0 W: ~$ K# j
*/0 {1 F" X. x) ^. l3 Y
3 ]; |6 Z8 K$ Y7 \
/* no rts heap */4 c4 L5 J+ h& R2 A. m- ?% ?8 a" ~
Program.heap = 0;: }" P  M$ t9 z4 x
Program.argSize = 100;  /* minimum size */
+ @6 M4 J$ n: `6 R0 q( z6 R8 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! B( |; n% N; K9 @

: N7 N" ?. y! r/* create a default heap */0 K* e/ d; @# \# o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' R) }1 w- M! w0 E! Pvar heapMemParams = new HeapMem.Params();/ |6 b% j) ~- g0 w( i% O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 D1 X* P6 A' M- N- \! u  Y' ~# Y
var Memory = xdc.useModule('xdc.runtime.Memory');
$ T& X7 f( H2 m# p8 UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% o: X2 }/ e3 v+ Q

4 V. C3 J. G4 g) W0 G) E/* configure System module */, j+ B% Y+ ~: e9 k3 f- L% x* D0 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');# M# M8 x8 f) E: q" \: @/ S2 m2 [' _) z
SysMin.bufSize = 0x1000;
& y4 C$ z5 n$ Z/ O0 _& T4 ^# pSysMin.flushAtExit = false;+ ~4 M' N- b& i* |# K/ d+ G
( s% r3 `, i8 q* @  ?* \
var System = xdc.useModule('xdc.runtime.System');7 x) |8 ^& |6 I9 p) Y! W5 [3 I* x
System.SupportProxy = SysMin;9 G7 f) D' A, ^. J! ], ^

6 q; c+ k. [% F" N# K* x- p; \  P/* configure SysBios to use the lower half of Timer 1 */7 J) ?0 U/ a& j' @
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 G: s. C/ C. r' u  e3 q) ^9 {var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 P4 N5 J' w3 ^% g. [
Timer.timerSettings[1].master = true;. {' c+ D2 h, y& a" `
Timer.defaultHalf = Timer.Half_LOWER;: w$ {. `2 }$ f7 U
Clock.timerId = 1;: X5 U, w+ g# C2 M: }2 N& v, w- e

! e# T+ G" y6 y/ y9 z
2 _3 U; l( m; e% p/*( c4 G; ]& `- b% y. @+ a% p7 L
*  ======== Miscellaneous Configuration ========
4 r$ M& [9 J8 |/ K */
) @! f2 A- q3 I* i* w5 h3 r! Q/ q
- F5 B  |6 P2 D$ F/* set default diags mask */
; U  o; z/ l& x' d# j8 Nvar Diags = xdc.useModule('xdc.runtime.Diags');: n$ v9 l3 L- I9 C5 R: l, d
var Defaults = xdc.useModule('xdc.runtime.Defaults');
- Q5 u4 c, P! f+ o( t0 q4 Q- s: f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 {  M2 \$ g8 g/ r& RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) w* e# ]- l$ O4 G' Z. h+ k3 m, Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: m5 e. w7 X' t* I2 t0 aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) k1 i9 B5 X3 \( B  F' C+ m# IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! K9 L% q& s5 L* [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, Y9 q. H& W* u  m/ m8 i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- e  p: e& p7 v* d3 cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 U' J- ^; w. E3 ?; s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( C" @. m; E& b5 l# QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, P! b; l0 w2 K' Z) E7 s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 h1 E1 X$ @% M, |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; k  A( _6 Y8 C3 R' X% K2 EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ ~4 s1 U" O1 e9 J$ x, ~( O/ KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  [8 s  E6 V0 V' f! q
/ W! w; `1 ?' G6 a0 X" Y  u
/* override diags mask for selected modules */
( H1 h8 }9 T4 T9 x1 Jxdc.useModule('xdc.runtime.Main');, F0 `' M& d9 d$ E  C0 b- }
Diags.setMaskMeta(/ _$ k, {' ~+ D# Q8 T- |4 m
    "xdc.runtime.Main",
5 D1 U' J3 P# f9 o    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ |6 i( p# o! h% [% I' @3 q7 N% |
    Diags.RUNTIME_ON9 }* b, ^6 \1 o2 y
);
" d! G. z" I) W: {3 k& X2 f) X/ O+ I1 D2 `: k
var Registry = xdc.useModule('xdc.runtime.Registry');. q8 z, R- [# {7 y. Q- {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 e  P+ y& V6 _* JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 `- i: Q: A4 k3 k/ a5 S. V& x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; V# M9 @: ?# H7 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. A4 b* L% l7 R4 W

2 j" p- c0 m. Z/* create a logger instance */
+ i9 q  s4 T! y5 D) h6 q7 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' r+ p4 R* X5 b$ ?
var loggerBufP = new LoggerBuf.Params();, N5 P, H5 o  B$ V( L9 m$ @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. y- _  O0 l, B3 H* Q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 M/ \+ S  k4 F) m8 k) [
+ p/ @: n3 ~, L* K  d! `
var appLogger = LoggerBuf.create(loggerBufP);; o, l* t. D4 L/ p! @8 j: U
appLogger.instance.name = "AppLog_Core1";) ?; C5 D, |; H4 x, C3 j/ z
Defaults.common$.logger = appLogger;
- q7 J) K$ b. K* P; FMemory.defaultHeapSize = 0x8192;    * N/ e9 F' p4 U- V% D+ H/ M
Idle.idleFxns[0] = "&LEDStatus";
: U9 p! s4 m9 ?! V, WCache.initSize.l2Size = Cache.L2Size_32K;
0 |, U. [! B9 u* n9 H
7 V, t8 Y9 }& c# _
回复 支持 反对

使用道具 举报

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 */
7 N& k3 ^& _  {& E: Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& k# C5 V# W$ m+ d* ]' t' J  T# z/ Ivar heapMemParams = new HeapMem.Params();
% g% v- [/ x" n/ GheapMemParams.size = 0x4000;
3 f6 X8 u# i" R. Z; m
: u9 L/ }" q" o# Q, h4 d1 ^: K2 Qvar Memory = xdc.useModule('xdc.runtime.Memory');
5 _. P7 G. {2 X, PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 T! J/ Q' f, R+ p* U% \4 v
7 b- O) F- {$ l, b+ L7 g( E8 D我大约calloc  每次共计大小为5K*16bits,# ^+ E) l6 ?: ]$ `
而默认配置才0x4000、需要改大。
# X  b) {0 B- i! ~4 G8 N7 Y* }& o  Z4 o" c( {+ f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 \, E1 Z& G8 r" E. S6 r
Program.heap = 0;
: k+ d' K5 |: y8 U! xProgram.argSize = 100;  /* minimum size */* [( X3 r2 H$ Y1 M! _% v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-16 19:10 , Processed in 0.043245 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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