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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

3 f& |1 G/ N: M  G6 d; B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 Q8 g  h6 Z( Z! h! u( l( u/ G1 A0 L, X
其他程序段。。。。。
$ P8 n1 k3 k0 D
. }5 D* |( J1 z2 R3 X   free(x_d);, d5 A2 |+ z2 ~+ o) t

2 j9 Q, K# |5 Y" f8 }: n使用DSP侧单独调试功能,验证动态申请没有问题,, L3 I3 u$ L! n8 f6 f% ]

% q  B6 M0 z% c2 o4 d& F1 n; c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ ?' P3 c- D% j, U" f
. z& ~; F  Y# A! j

  d% ^9 q; ^: o8 O5 Z% U# R4 i3 s8 ?. K  k, I4 j$ }

9 G- |7 x# r' _# p' K
" I0 d- ~+ G( o, l9 t+ H( X7 ~& f5 z- Q  e
* J6 V( w: T  ^# P4 g" X% {
- H5 Q5 ?8 n0 S/ p/ |
/ W( N9 ~" i' t1 M
- k# H7 o: s. E+ l0 }: }
& V* C' q0 R  [, O2 z2 {; Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% M8 u' r0 X, P4 T1 I1 PProgram.heap = 0;
$ U: O8 V. \- fProgram.argSize = 100;  /* minimum size */
3 @! Z1 u" w! n2 |* W5 n( I" [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
) d) W$ W6 W& H- J# T; x" t8 g/ rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 B/ y- t/ I2 a1 e$ p/ V. uvar heapMemParams = new HeapMem.Params();
3 I# s* @1 W/ R; w7 D! YheapMemParams.size = 0x4000;% U+ y) ?* P5 F/ T) c6 J1 c+ W  Z
* P$ Q9 H0 r1 C( Y! e
var Memory = xdc.useModule('xdc.runtime.Memory');( h. m% I4 c+ k- K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% s9 q$ `/ ]/ p# U6 d' S. y1 z

  u4 y, l1 P% D我大约calloc  每次共计大小为5K*16bits,& c) L; P7 I% l) ^/ u# F4 L# m
而默认配置才0x4000、需要改大。
1 m1 ^2 G) J% y) A- A9 }
0 f' y9 a1 g2 o" N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ O/ q/ N. n# G7 H% ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 T5 x* h) l; j5 q. d6 S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 Q) m/ s* I3 o

! v6 u" E( q! N0 o1 S1 ]8 J( n是不是需要在DSP.CFG中进行配置
1 y) J/ p% U3 s1 f# {我现在的配置为6 I+ ?+ U8 e  Z% X2 L

! w+ o, f2 V' S- D6 Q; z/*
7 i1 @, b+ I; X# A *  ======== Operating System Configuration ========7 u- S# n7 {$ ~$ U7 R: w2 @
*/' c$ s/ a# h. ~6 A  ?. c

" j, j- B' D7 I  u1 {! e; d/* no rts heap */  O, K$ F/ i. z- n( J  O4 q
Program.heap = 0;
0 P: z4 A8 @( lProgram.argSize = 100;  /* minimum size */
, T' H, A' N  p. @" G8 wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ E  N0 s! w5 {+ L, t

# x! o- b6 r0 u! i% G8 U* `/* create a default heap */# d) |7 `, e, m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" m$ g- Q( }# F( S( k
var heapMemParams = new HeapMem.Params();( Z' r8 Y( i9 y5 T2 K; ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 `, M0 M. l+ r" {# X' @
) i- W; p& y  J
var Memory = xdc.useModule('xdc.runtime.Memory');% M' n" w0 n$ x; D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ ^& H- }: N+ O& p, {$ A5 ~
/ h& W# ~( P7 V' s4 l% \6 [/* configure System module */
8 c; d. ]( X! ^var SysMin = xdc.useModule('xdc.runtime.SysMin');
# V2 D7 b3 T/ Q! ^SysMin.bufSize = 0x1000;
) ?7 N3 G7 I* f" a& [5 G  zSysMin.flushAtExit = false;
# c/ j; j8 N! _9 K2 [, h- G! j; o" d7 v
var System = xdc.useModule('xdc.runtime.System');
  L" l9 }. z; Z8 @4 R% X9 C- c/ aSystem.SupportProxy = SysMin;
4 J  B  K$ }* y) S, m
' ~5 ?5 w" Q% y2 s4 L/* configure SysBios to use the lower half of Timer 1 */4 i$ L& j2 T$ S: g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" M1 G0 X2 C4 c& B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ Q. P0 ^8 N$ o7 C+ \7 w" \; oTimer.timerSettings[1].master = true;
2 Q( _$ q' U' L2 P/ iTimer.defaultHalf = Timer.Half_LOWER;4 K  p7 F# m; S# [0 c; ^8 f' T* O; o
Clock.timerId = 1;* ~9 f, r) \( A4 o
! H  ?! P# q! K6 O" c

1 b! S& p' u& ^6 C2 z  Y7 M/*
% r& C2 L3 Y- K& j *  ======== Miscellaneous Configuration ========# ]' x% Q( L. d( Y* k& A% y
*/; m7 `# v; t3 V7 p& p1 W0 _
' a7 s* \3 `( E; j/ }) R
/* set default diags mask */4 e5 s( j; ?9 j" b6 N7 N' n2 R; V
var Diags = xdc.useModule('xdc.runtime.Diags');
2 `' ?' I9 z( {; M- R$ ]" Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 T3 y2 g+ u  Y7 K! m1 O5 g' T, w7 J' T) T& f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 H# [5 n1 q6 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  ?/ t% y9 c! t1 }" ]3 z* w  c; h1 u* r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ q* Q9 p6 Z( A9 M8 \9 S
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 O: I  A8 B3 @/ f0 A" LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- L+ f/ F- R/ w1 _! a0 jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 U; h* @- y0 \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# v+ Q6 r2 p$ D: vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, J6 {% ]1 n! [; [: i- v7 b5 KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 ]  I: f9 ^* K" D3 B" w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 |4 |4 T/ H: C3 t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ f) p6 w% S+ R% ^" \+ a' eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 v0 S4 h5 v7 E; m. \6 CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 c$ A* C$ i; [  i" s' rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" M4 ~! ]' E, i0 u( _
1 W7 c2 B4 `# d, ~
/* override diags mask for selected modules */
3 S1 p( _! `, U+ hxdc.useModule('xdc.runtime.Main');
* p* D: d# P" p* N7 }& ]$ WDiags.setMaskMeta(; y  w  e3 S/ }
    "xdc.runtime.Main",
$ s. i1 b7 G, r( t2 U  F    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 E; x- [" a7 E" R+ B9 A
    Diags.RUNTIME_ON# A. S) r* v8 c( M" W" ?/ B) Y
);9 ?, E( z2 _/ T: N& y8 }! d- e6 G: f% N
, Z' @3 V5 r0 E1 `
var Registry = xdc.useModule('xdc.runtime.Registry');1 w  ?- F' X3 s0 W, _& J( H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 \8 H9 u8 ~* M4 ]2 b1 cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 Y" z0 X! @) e! b6 T$ t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: b; a( h! K8 f7 Q: |3 Y# \! PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ L3 j$ u1 L, w3 o" E4 E; R
0 e' c8 {: D6 B1 n8 X0 ?( ^3 ~$ v/* create a logger instance */
0 z2 a3 o, z9 @6 ~( ^3 ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) U3 [4 E$ V0 _7 S9 jvar loggerBufP = new LoggerBuf.Params();/ C9 Y! b0 t7 [4 }. }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 D4 o/ W) h$ @+ f% [/ SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 X2 G1 ^3 @: i& `/ i
8 k7 Q7 U" K: A8 \var appLogger = LoggerBuf.create(loggerBufP);
$ T1 L+ W8 b, J( |appLogger.instance.name = "AppLog_Core1";5 p4 L% J! @* g- A$ O
Defaults.common$.logger = appLogger;
: K, K3 k7 t0 x# j( J: X5 C" F* B; E, DMemory.defaultHeapSize = 0x8192;    . H  Z2 H$ @' K+ z" k
Idle.idleFxns[0] = "&LEDStatus";
. C/ A; T2 o$ a8 iCache.initSize.l2Size = Cache.L2Size_32K;# C+ }9 h8 M; `3 U2 J

$ a$ l) g3 Q* D& @) q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 17:11 , Processed in 0.042508 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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