关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) r/ k& H9 W4 k. Q+ y+ z/ m  W! }; H
4 o# `1 ?' L1 B+ o, R2 m1 ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ o( Z! o: w$ X% q" u  F7 b
" `$ J7 M4 ~, B; M) u: d其他程序段。。。。。/ U) C$ z" ]) I  N

5 `$ {! x3 ?  g1 W7 E1 [8 C   free(x_d);
' Z) W1 g5 F( E3 ?# `1 j5 P1 L8 I* e* }
使用DSP侧单独调试功能,验证动态申请没有问题,& M0 H' o  f! |$ C6 e1 Z" r- r

- S0 x! `. H( m# l, B5 D5 ^, Z2 g7 S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, F4 E$ ^9 L# L6 M0 b9 R( b

3 u. U5 }( X! Z4 x$ a6 K: P0 t6 [- X7 M, P2 R6 y: G
+ ~* G; b9 |+ [* G/ [2 H: B

/ C# ]7 z4 d5 r; |! k
3 y* p4 t3 x5 ^8 E* P- l% T* _. p: @! }  Y  F; m. S6 k- s

$ l- o( X" N" Y/ k. y2 {
# F% @2 p" C6 o( ]8 T3 M: R) ?; {0 J& H2 ~  t9 D  h( _/ J
* [2 Y) h' m8 G' Q' e& p5 S& l
分享到:  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 */# Y2 u$ N0 A- K. c3 P# C( a; H
Program.heap = 0;
2 p5 G- p( L% B. Y5 {" Z% w  iProgram.argSize = 100;  /* minimum size */
+ e2 \$ Z$ p) k/ MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! O" c/ J0 ?( B, l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 {' `, M4 l! D  xvar heapMemParams = new HeapMem.Params();4 M. O( E. Z7 J( v6 y; i$ P
heapMemParams.size = 0x4000;
5 ?3 v1 Q% R) T/ o' d* g
' T8 G1 ^( P2 ]  I2 u8 d5 wvar Memory = xdc.useModule('xdc.runtime.Memory');
# O* W7 y$ l; ?7 Y& r3 F; HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 a0 G" C: B+ }, n. U0 N

0 M' Y8 x+ I; k' j- Y1 @, L3 |( e我大约calloc  每次共计大小为5K*16bits,: A, w3 L- S4 V$ d$ e; l
而默认配置才0x4000、需要改大。
6 |$ P1 S5 r4 _
! u2 h0 u+ H- x' Z1 T
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明' \: I4 h% Q; U% i. J  D) k3 L) d, \$ }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, U! u2 k- U# @% A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  r5 w3 G3 G6 ]: [" X
" e, C- g$ B( Y, A- U
是不是需要在DSP.CFG中进行配置
' q, S* q9 A3 u6 ^- c! `我现在的配置为) T' d9 @$ G  C  \) u, V! o2 M
& P4 }/ ]1 e6 x
/*
- x* ~; O2 r3 }5 C2 |) c *  ======== Operating System Configuration ========: c) ~! E2 B/ Q. V, r' U+ ^' j
*/! I  b5 m* ^- Y% F- [

. h( E/ j+ I1 n; d0 g/* no rts heap */
: ]# B; D, ]% c0 h: O8 N8 Y5 EProgram.heap = 0;
4 V0 u2 `8 G6 R) ~& v+ j5 L" l; v8 ~! }  hProgram.argSize = 100;  /* minimum size */% B* d4 j$ @1 K5 X9 l7 C: F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! T* c1 Y8 g& J1 w1 k
# Z  b, y  D* e: p
/* create a default heap */
" T1 E! e/ E$ m1 Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ T, T# b* u" k; t, @. E( ^: Z, hvar heapMemParams = new HeapMem.Params();0 U3 ?. q2 ^" f& v6 ]+ F
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 g8 L. g3 |' ]7 s" J5 d
" V7 n% M8 ^$ ^: A+ c
var Memory = xdc.useModule('xdc.runtime.Memory');3 q8 N& v9 e4 i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 v& v7 ^4 d$ l% [# H- E3 \+ C% L
* P6 z! o3 I2 W5 Y
/* configure System module */$ |1 y( \4 v7 _2 ]5 M
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 g6 N1 z* K) B; }6 D; O
SysMin.bufSize = 0x1000;5 ~$ q- K; |4 |: Z
SysMin.flushAtExit = false;. g4 o) p, W' n
! {5 f3 g, ]: u/ H
var System = xdc.useModule('xdc.runtime.System');
0 u/ D" i3 j5 l0 {! k( nSystem.SupportProxy = SysMin;
! n* _+ y6 \7 o6 R+ T" H/ A1 p& D3 I1 x, @1 c7 I
/* configure SysBios to use the lower half of Timer 1 */
2 e; X2 a* I/ L9 z+ M# Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. A6 N8 L" M0 W; {: E1 Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, x1 I# C  }  f: ~/ V# m" mTimer.timerSettings[1].master = true;
, `. N# A# P1 s) TTimer.defaultHalf = Timer.Half_LOWER;: u, s( T" T) \( B' n
Clock.timerId = 1;$ {8 L+ F5 k9 ?8 a  e9 k

0 A' v1 T' B0 Q/ u# h+ n8 z' K5 Q7 s$ h$ i3 ]& E9 x
/** O; B7 @! {9 S% s' Z
*  ======== Miscellaneous Configuration ========8 `5 G6 `4 N- n6 ?0 q+ }5 c
*/
8 K; d+ ]; I% r5 Q1 x+ x& {, a* X8 i1 J; b. G" c7 U
/* set default diags mask */# M, A( B4 }% h6 q, Z7 T
var Diags = xdc.useModule('xdc.runtime.Diags');
0 U  m' g$ s4 s9 |* q7 \var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ D7 \3 D) w: x8 ?) v# \
7 ?0 ]6 S7 V' r" YDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' g% u, B' K0 v% R) e. F$ j8 rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. J7 b* r3 u: J' K( d: u, _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. G; j! Z( N# G2 o4 }& d) @6 _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# D6 R2 n( i  s* `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- `3 ^  Q6 _3 p% E/ vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  J" T- }- z2 g4 ?7 p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; i, Q( \. K: X0 R7 R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 _: R9 U* s( E% N, Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ W# E5 @5 F* x, |* u+ v  U9 y7 w7 U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" z- X# }/ ^: T/ m" \& QDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 ?. C7 ^# v5 o4 F0 F" x# z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 _0 X: z) F0 b! `; b7 J7 a* ]# jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 M' T6 ]/ P1 M/ O* M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, f( M8 n2 L$ l5 a( o9 y$ @! x
& E& n* Z& E7 }1 _5 n/* override diags mask for selected modules */
+ |3 S  N: W" {8 W* H; B2 x8 ~xdc.useModule('xdc.runtime.Main');5 k. j4 p+ L, ~' q
Diags.setMaskMeta(- M! w. {& \" }4 `* f) A
    "xdc.runtime.Main",
5 K+ |2 o( |# Z7 r! B  Z$ z$ c, `) W    Diags.ENTRY | Diags.EXIT | Diags.INFO,' `. y9 Y8 R+ q9 Y3 R( P3 J
    Diags.RUNTIME_ON; E+ x1 l$ [' ^. f3 M8 v& W4 q
);. A6 t+ _5 `- [- |
/ n+ G5 k% B+ n2 _7 c
var Registry = xdc.useModule('xdc.runtime.Registry');9 n! Q. C- V' ?/ ^, J4 R. e+ L
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. u9 z' Q  m2 X$ cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ q; S3 s" k/ R# f$ b8 i% h! wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 T9 `- s: s5 z. d- v- z, [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) Q; h) Y* N+ V
2 y# b7 ^7 p! r% }/* create a logger instance */2 T# v+ [9 _. s: T# X7 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ |5 y: j4 ?# Y4 wvar loggerBufP = new LoggerBuf.Params();
) m3 Q: ~. a7 E+ }; k0 N- i/ CloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 s1 ~3 z( Q/ r1 \loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 D. M* F* _$ l5 U( n) e* `5 o
  A5 V; @2 p9 qvar appLogger = LoggerBuf.create(loggerBufP);  V9 X+ k: s0 C) e0 [
appLogger.instance.name = "AppLog_Core1";
, ]$ n9 j% Q: ~) EDefaults.common$.logger = appLogger;
' c9 [: P* j+ v3 t; mMemory.defaultHeapSize = 0x8192;    ) T/ [( u- c/ S; F1 a
Idle.idleFxns[0] = "&LEDStatus";% P  J. ]0 \% \: d$ n0 [& j9 F
Cache.initSize.l2Size = Cache.L2Size_32K;
" k& C2 S: k4 d$ |7 g, P/ P7 X, B" h6 T% i0 u7 Q  F1 u# |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 05:57 , Processed in 0.046280 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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