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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; T0 R' Z1 v$ O) t" ]9 [
& `8 U+ A5 l0 l- J$ K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: e- I2 H4 m0 e/ p
2 e' `9 I/ f) x1 T/ p9 c0 h/ K
其他程序段。。。。。; ^& M; h  ]; `6 s9 ^7 A; f

- p* k( I5 ?' b* `9 \8 k" i   free(x_d);, k+ w$ c+ a) u' o, g3 o

% j  Z2 V6 L( s) G' z  ]使用DSP侧单独调试功能,验证动态申请没有问题,
9 h, B5 g: u+ K
/ h/ X" E3 b7 w# B6 r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( l! A1 z5 C8 r) `
2 [1 J1 i% z3 ^# C

4 A  c# [4 R- y- i/ I" ]) q3 B3 @7 T- C
- e: n  O7 }( _* U

, \( O- g) F0 a1 B9 H+ ]
8 b, x* x2 |2 B: O- {# ?( D& ~  C: m" A/ t3 u0 c  Y, z6 _$ J% j
9 _8 S3 }( M- \3 y& V

+ L2 ~# v& j0 ?8 m. K' R6 a
2 m; i. g+ K( h/ p0 |; [8 h9 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 o* M1 U6 [6 m+ p3 B; q% Z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- ~* U' F2 V" U1 M7 h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ H+ S0 Q7 ^& Q3 B! N

& n2 R% h* X0 M% G8 N' C是不是需要在DSP.CFG中进行配置
& i, l( {& V# [8 v: `& l我现在的配置为) ?% ]3 s8 t/ I

& F  G. y/ Z/ O9 S' `/*5 F1 n6 I3 G4 [  @
*  ======== Operating System Configuration ========
/ e$ ?  R7 h* L. p1 P1 I) o */
' h/ i/ W- |' K, K$ @7 G$ v0 w+ m
$ W3 Y; m$ _1 f. K+ H6 D& `8 Q/* no rts heap */. N" j# G2 Q2 ?+ M+ Z  }
Program.heap = 0;
; R$ C) K( \5 N# p4 R& u1 pProgram.argSize = 100;  /* minimum size */
2 X) W5 ]+ ]; D: Q6 w/ w0 Z* Y* OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' W0 C8 U  x/ E. [

. X; {! J# ?% @5 d- w$ j9 t/* create a default heap */
# L5 N' n! ?7 Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* K3 c# c5 E8 S# w
var heapMemParams = new HeapMem.Params();
; ~( M" x. O1 PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  _" _! W: h/ ^( n
' N. `* K/ A$ ~% t
var Memory = xdc.useModule('xdc.runtime.Memory');
, k2 h% D- d* gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  _, i% ^: ~& ]2 @

6 v! T( y; F& Y/* configure System module */
* A; s" X% n- v% \8 K/ [var SysMin = xdc.useModule('xdc.runtime.SysMin');% T3 k% Y9 ^; |" n5 }+ z
SysMin.bufSize = 0x1000;
! I2 f. {# ^, @9 I/ _SysMin.flushAtExit = false;& D' n8 [8 f8 {3 B

$ w5 p0 U/ S; Mvar System = xdc.useModule('xdc.runtime.System');
4 \/ v# z; }/ _  T# Z" C; USystem.SupportProxy = SysMin;$ N+ N3 w  ^1 x  v

3 A+ u, w! V; e" @- `# S7 |$ R/* configure SysBios to use the lower half of Timer 1 */# x$ j6 l3 @1 ?# [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 e" S  l; n; k. S* d
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# J+ k9 ?/ @& |$ mTimer.timerSettings[1].master = true;- v' x5 \$ l4 a' C! b% f
Timer.defaultHalf = Timer.Half_LOWER;# C4 h' a: w$ z# I
Clock.timerId = 1;
0 v$ G# h7 @8 _$ }- M. ?2 W$ F: N+ y( p9 {5 ~% Q0 W* }0 p# ?

, r6 P8 m1 Y( w7 [7 t# X- O$ G/*
5 d" J3 T1 a) ?5 ^) X *  ======== Miscellaneous Configuration ========
' }& c' i2 X$ }" H) z4 |* W *// L& }- e8 _8 U2 ?% x, p3 `
: y# L7 ]7 E) D7 B
/* set default diags mask */* Z: ?( v+ `2 r8 r$ h; w2 }3 d
var Diags = xdc.useModule('xdc.runtime.Diags');
, m; C* i& J) G6 y2 B5 V8 B% d" Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 c1 C4 V1 {/ a  [2 U  R
. M( w& I6 X% v5 m) k6 ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) J8 a8 f7 r) N$ K( h  rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# r* A+ D7 h- V! FDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 ^; R' G: P1 X+ ^* MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 s# L, y: N" n2 T7 D4 B# T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 l6 B+ ~6 N) D2 i5 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 }' N/ q1 A7 Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! W; p1 g  }' b6 E" l$ v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. H" @: d0 \! T0 _+ M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# k; Y+ u* C% `" \. l% x! V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 o1 ~( m) m6 K% M6 o. c2 R, M) U& ^
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  n! [9 [$ i5 ~" M+ n7 }8 m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 L6 T2 N) m$ G/ M/ Y' F) v' b; ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% q+ c, h  A7 @' H9 cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 p# p1 Y7 F' v' h/ J: h/ I

  C) F6 D9 N5 q, T3 H1 _2 c/* override diags mask for selected modules */; B$ g+ u* Q+ Y1 P
xdc.useModule('xdc.runtime.Main');0 f! w. X  M$ j4 u1 M2 ~
Diags.setMaskMeta(
$ o1 J) [0 Q2 U( N6 d1 c    "xdc.runtime.Main",+ k9 C8 x; A$ F- ]/ U- h7 R$ t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 B, J) l' m' n8 T6 y" a3 p) |6 B    Diags.RUNTIME_ON
7 X9 ]. D/ G9 a& J% ~);8 ~/ I: @  z* P+ D  ~8 H( b. }

6 T( e( y$ _5 V5 xvar Registry = xdc.useModule('xdc.runtime.Registry');' H$ ?/ B( _+ M! e+ p; w  @2 ~9 f# \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, }; e8 b( G' K. URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 \" p, ?1 l. s: h8 Z8 \% A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 b8 W0 z, S" p7 v# T. iRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 B" H" D* X/ W; j8 V% `. E
9 I# O2 [0 e- |/* create a logger instance */
: T9 u$ U  e5 A7 n% Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" q6 Y/ O  ]5 `$ vvar loggerBufP = new LoggerBuf.Params();% c! _' J" j& h4 M+ m; N' R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) l6 I/ Q* w) s# J& m3 YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 F* [+ K$ z" s
! W/ \9 M) }* M- c. Q( rvar appLogger = LoggerBuf.create(loggerBufP);1 Y! u% x; k; D3 M8 u4 `
appLogger.instance.name = "AppLog_Core1";
& {2 B/ B( L9 z( f2 [. V3 H0 s3 bDefaults.common$.logger = appLogger;- W  [* d. {9 h# D- w2 g
Memory.defaultHeapSize = 0x8192;    3 e* ^# }9 Z) w  U) c! C9 ]
Idle.idleFxns[0] = "&LEDStatus";( P0 L1 I) ?6 E3 |2 w
Cache.initSize.l2Size = Cache.L2Size_32K;8 ~8 T4 s2 F2 p6 N. q! ?
: L& }$ {& ]) G( r
回复 支持 反对

使用道具 举报

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 */
& Y: q- D: }1 L) A8 ~& _, V* qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# f8 c8 k* j2 u6 n
var heapMemParams = new HeapMem.Params();
5 t! a1 [+ V0 D8 k6 ]0 eheapMemParams.size = 0x4000;# q% {$ k% ^9 M% I; }- K& }" B

' _0 w: A! u) a/ G6 R8 I$ vvar Memory = xdc.useModule('xdc.runtime.Memory');3 @( f5 I/ f) \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' L6 `) Z* J7 x4 T
3 \' S" T, j) B( _0 v7 I
我大约calloc  每次共计大小为5K*16bits,* C7 {* c# m2 U9 n/ n
而默认配置才0x4000、需要改大。% H2 I" p: }8 X$ ~( g

1 ^/ A3 l9 g9 ?9 @/ E/ I3 _4 y) m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% h- V8 Z# B9 c, H/ I( U& x6 nProgram.heap = 0;
" x9 W+ C) O# E& h% W3 Z$ Z5 jProgram.argSize = 100;  /* minimum size */0 K  b9 F% {% \* r- b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 00:18 , Processed in 0.042034 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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