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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: @6 c# `/ I$ @; j- A* {
: z) D: D; D5 E8 P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& c! r$ I6 P: ?( w$ R- h' _
- c% u* L+ ]  d& i: Y% j& M
其他程序段。。。。。& f6 |+ m2 U' n6 o. i6 I

) ~/ U* W% I5 ^: I' [; [   free(x_d);" b$ A- e6 M3 m4 a3 k4 {% U

' K2 p- [2 V* z4 p使用DSP侧单独调试功能,验证动态申请没有问题,
* l* F' |: c! k% N5 v+ g  x) S2 i) i6 Z+ H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 C9 h$ c, }% [* P6 o

# ?4 n( [2 [! P4 X  r3 E5 B$ q; h8 X: `% h$ x/ a% C/ P
$ h5 a: y7 {+ U: p( w  I) z
- {$ o% H2 m6 P6 P, S+ t
  P8 b3 ?3 ?! b) f$ C) c
. R9 P7 {7 P* J, B4 o/ d) f8 a
6 o3 o3 s$ P* P  _: T) x3 v! P7 b
3 ~4 a6 n1 I( O1 G& e; ]* p

1 X7 E$ V: C* V4 E! y, E3 Q; P4 t9 C. m, O% _+ `: N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ d% O5 f7 B  M% @5 D; u7 @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; c/ X: l  x9 x1 _3 D. Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  _& K- Q; D) J5 x& m. l- U+ b
( S( R* y! v6 N" p; [# {
是不是需要在DSP.CFG中进行配置, c* q8 ]9 b4 s; u. Z9 _
我现在的配置为3 |& i! A2 r9 M" r( N& X0 Z; ~

( h, Y( D) t- h8 Q& _/*
  p. |- K7 O* }% ]# P' J+ u *  ======== Operating System Configuration ========* g; [2 A& `# u% E4 n  _, V7 K" ^
*/
) Y1 M3 V& K# _6 p5 M7 H- I9 h  ~1 x# ?  @9 J! z. O% b
/* no rts heap */+ j, N# \/ p7 _+ ?8 E2 ^
Program.heap = 0;
6 ]) ~1 Y& b) b+ O! d0 [Program.argSize = 100;  /* minimum size */
: D! X9 {# v) d! S; ^) `' f7 ?, U, VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 c& F/ M) F; g; a. L0 g& z
; {* K& i! [' s7 w' I, f
/* create a default heap */7 ^5 F" x' }. B4 b: |2 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! G( A3 F+ P& `
var heapMemParams = new HeapMem.Params();
0 l1 v0 {: A% P: @$ a9 l! z6 M7 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 o7 M, N/ N, L# X

. @' P/ m$ T6 q  Z" q/ v$ `: t! d
var Memory = xdc.useModule('xdc.runtime.Memory');& H# U7 L% w$ r' M) U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) O0 h, q+ v3 ]8 @7 d2 a
5 x  o( {# F" g6 O9 p% B
/* configure System module */5 m: g2 P- [$ @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  O; a% Q2 _" C5 e8 Z3 n0 fSysMin.bufSize = 0x1000;9 t# t# y( A8 S: W' U$ p6 z
SysMin.flushAtExit = false;
2 w! [9 n, r/ L* u0 C5 A' T7 j4 K3 Z$ h9 i$ j3 t
var System = xdc.useModule('xdc.runtime.System');* u2 l# p2 T2 Z$ r$ W; K
System.SupportProxy = SysMin;
. M% C; Q0 _" P9 {( W1 m# W
+ L7 u; r! Q9 d/ o# n4 [7 @! I/* configure SysBios to use the lower half of Timer 1 */
) p( l& P) `4 m2 [( q2 w" Q* U8 [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( C5 m7 x8 J1 @) U9 [3 Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- D5 S( R" I8 b9 {$ ?; _
Timer.timerSettings[1].master = true;
$ e8 ~2 C# R9 y" ^9 b- c( n+ ?6 NTimer.defaultHalf = Timer.Half_LOWER;
9 m$ N' T, L# o% p9 h: GClock.timerId = 1;
0 G7 \3 F, v' h! w% d+ t) C3 n1 }* u) v9 `

1 V  g! q. \6 ^0 M5 g/*$ j) |  J% w4 E$ x
*  ======== Miscellaneous Configuration ========
( s: a$ l: m" n5 {( [2 T7 T& m */: [& e  g1 M% }8 N3 I; M' @" U0 |
& T% l& s' F3 a: T& F. A& @. v9 E
/* set default diags mask */; [' E& e  \" @; ~0 t
var Diags = xdc.useModule('xdc.runtime.Diags');1 B7 A9 u* z0 [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ r2 v- }; M9 J/ C- `
4 h5 t5 y# z9 C* _4 k' D5 Q; [$ IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 u1 a# q5 u- h# |, W! O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 L1 u* P1 B+ n. f; l  l, d; X) iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  i  [2 ]' A& }6 KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) t  p" o  h) i3 C4 j, QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. d; f5 v( U+ }) W9 w3 k7 WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  H% l  t9 P) D5 k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 W6 L/ `0 M$ fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  l  z) `& E! t8 F, j2 p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! j8 |4 ^& P" g/ K+ @, O( b4 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ [& d. A7 {' P! C1 n' I5 g* u8 X$ H9 IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ H8 L3 m: h  |, R' m4 U$ ?; r+ f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  E" r9 O. }$ uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 o2 S& a$ u9 T1 t' P( K$ cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" j7 o1 g0 H4 M5 n
1 s; y0 H  X# }4 b
/* override diags mask for selected modules */2 S; Z% E. T. `3 B5 L0 o
xdc.useModule('xdc.runtime.Main');1 f" O) {5 t  S. O
Diags.setMaskMeta(
! b% A3 {/ M8 u' `0 F# ]    "xdc.runtime.Main",& [+ o% p/ F, @/ p  S; ]$ s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  x( a3 ]* @  i7 c
    Diags.RUNTIME_ON
! [; ^- n; a  ]7 k0 x) x);
5 A: g/ f9 C2 o8 C; m' D0 `
# Z3 Z" j$ X, d6 w) e9 Ovar Registry = xdc.useModule('xdc.runtime.Registry');
7 E# I* u9 ?) Z! eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 H  v9 ?$ B" s) g2 ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# t+ _. K) k! L6 m8 f. |$ ]1 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 c1 S) N% a$ I; F5 ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( r5 b5 U1 r  S& p: j& }9 R3 H9 B* `) l- P- m, _/ T
/* create a logger instance */
& G+ G. Z; Y8 A$ C9 C( l! U4 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' V4 F- n! T) s. j% k9 w: w
var loggerBufP = new LoggerBuf.Params();
4 W  U3 ^3 L6 \) z$ g8 floggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 X8 u6 m+ G( j7 sloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 |3 J2 M4 T# ]# R1 a  l
6 l! A- I7 |! l7 q+ ?var appLogger = LoggerBuf.create(loggerBufP);
0 D, h) `0 o6 h0 L) A5 O6 [appLogger.instance.name = "AppLog_Core1";0 U5 J) q7 m! X5 s
Defaults.common$.logger = appLogger;
9 l) d+ ]: v% i% S  dMemory.defaultHeapSize = 0x8192;   
- J! p4 x8 N* R/ B6 N& |Idle.idleFxns[0] = "&LEDStatus";
5 U* Z$ T9 i! N: X" B$ u# Q- g4 DCache.initSize.l2Size = Cache.L2Size_32K;. M% V% a! @( p7 _

1 l- ^: m; H+ J+ P( U6 H! H
回复 支持 反对

使用道具 举报

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 */! D0 S7 o( O7 |9 r7 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 J. {; h( w  J  n! C2 P/ D! D
var heapMemParams = new HeapMem.Params();
5 Y; ~' p1 C6 r" {2 y! Y& S  W" VheapMemParams.size = 0x4000;- M. E' ^& r3 K( ]2 Q% B/ A

' |5 f' [5 B4 [0 p8 avar Memory = xdc.useModule('xdc.runtime.Memory');* v+ M: `% v8 _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, ^, {* C( O. a) i( }' W- w! M$ G

9 a. t/ q+ j+ Z" j2 _7 C; V" y0 v我大约calloc  每次共计大小为5K*16bits,
! f* s3 S7 A# M而默认配置才0x4000、需要改大。
: \1 @8 y3 K3 E9 U. E$ F
! I$ z7 C1 @4 X2 n2 M6 O+ D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 m  D! _% f9 }, wProgram.heap = 0;  N6 ?( i4 e& Q! t- n
Program.argSize = 100;  /* minimum size */
; X4 o$ B9 r+ Q8 p4 E2 {Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-19 23:56 , Processed in 0.046186 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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