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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; ~' h; i. K, k' S( S. B& Z$ w% {' x# Q) M  [) z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! @: B3 T8 @! ^- j" ~8 o3 s- [3 d2 t6 x& g4 u+ v
其他程序段。。。。。( j( Q5 H1 v0 r( K( V+ O/ U# d5 ~
4 x- C" {8 k( U' [; f) F# p
   free(x_d);
% X$ E1 v2 l: j
. a& b6 C  S# ]$ t; J  b使用DSP侧单独调试功能,验证动态申请没有问题,5 g* o: J9 h6 V0 V% C; b( ?

# `9 ]4 s2 e8 v. M6 d; F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 `( S8 u& V& u* R! X
. |( E6 V$ B5 J: ^

# ^9 f# U4 V% }; Z, q. g& [! j) M5 X5 {) I3 s/ p3 v
* N0 q5 g. e0 h& T: a* H
8 E: B2 a) Q5 p7 E
: q( y) P0 J! Z$ C/ [
- y9 X, L2 E9 f: A  \4 s
8 e0 @! M" }: S, N9 ^3 k6 y
" r( }8 V8 G" E1 K
4 w$ J& ~4 d1 L5 v6 e2 r
分享到:  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 */
0 h" D: e3 \+ c  k7 kProgram.heap = 0;. C2 O/ }" z8 @$ [3 J
Program.argSize = 100;  /* minimum size */- N% y% f4 n0 Y! H( n1 T
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 s# G, @. O( q* F; j0 W  ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" C1 }: x9 p' x8 }
var heapMemParams = new HeapMem.Params();) T, L( u& A4 o. T* T( ^, T
heapMemParams.size = 0x4000;
2 M- q# P/ g. }7 V- Q3 s
- u' E2 ]& {: {5 ?$ H$ Fvar Memory = xdc.useModule('xdc.runtime.Memory');
8 [0 p! G2 c! r  Q% qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  {, M4 x2 l" H! L( @. C
8 o6 G; z4 k6 i5 x, {
我大约calloc  每次共计大小为5K*16bits,/ m+ P# D$ d3 l( L1 {: B+ N
而默认配置才0x4000、需要改大。
* w6 s9 B! Y) U' T  N
0 R* C* }1 x9 K) P
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明" r8 y! c1 @- l, t: x5 P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ q6 z2 M9 J- d: R$ ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 y; F8 Z( M- V0 [
7 i; q: @, e) U  W. c1 @2 v' m
是不是需要在DSP.CFG中进行配置; R; K5 n% d) T" }( n; b3 _
我现在的配置为7 H1 |0 l. M$ k: E
; |0 ?8 v3 U2 s0 w6 {: V3 B& r
/*. C# J8 a" y& ^' D) X
*  ======== Operating System Configuration ========) H. m- _6 ?/ ?' R6 n$ n
*/6 p7 E: k3 t! \* g5 Z- a6 l3 N1 S
( v+ a* W7 R  ^7 F2 x( u
/* no rts heap */
2 R$ Y8 E5 I. K# ^Program.heap = 0;7 w5 N% K7 u' h# @' s
Program.argSize = 100;  /* minimum size */3 A& E8 M7 {! `( T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& I. l- @' S! n/ q
: q5 R+ _$ J! f/ l- A* R, L2 T/* create a default heap */
. N7 G: D& e* i3 _9 R- E. nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 s/ O0 Z) ~0 v, o- V) z( d% `+ ]+ g
var heapMemParams = new HeapMem.Params();/ T' D3 J1 @/ G1 }. J# A0 W) O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ w2 n+ e$ ~, _( w1 t

/ E/ h* I  L0 M3 g
var Memory = xdc.useModule('xdc.runtime.Memory');
# [' L+ |! G# C2 F+ ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 P- n* h. N  U2 _9 j" j/ p' N
$ D: v# U- I# Z% f- H9 B  H! V' L$ G/* configure System module */
; B  c" B9 ], k; W0 s# |var SysMin = xdc.useModule('xdc.runtime.SysMin');* X1 R' `& q. P
SysMin.bufSize = 0x1000;
# {& a6 x; z4 v/ \' E( C+ y5 XSysMin.flushAtExit = false;
5 F+ c# H( h8 H' l% r9 l4 J) a/ _# O- A4 ]
var System = xdc.useModule('xdc.runtime.System');( h+ y, d4 l3 m4 ?
System.SupportProxy = SysMin;
! X' s- `/ N1 R: K" e$ x- ?6 S1 ]+ p. J5 J( E, Q, u1 g0 `! s
/* configure SysBios to use the lower half of Timer 1 */% j( e: Y$ t+ @; U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  |8 }: B" B. D* b- }8 D! Nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 \5 m/ r3 U8 R% r& P: P
Timer.timerSettings[1].master = true;
3 E0 [; M8 g6 n( m+ u7 g' U+ XTimer.defaultHalf = Timer.Half_LOWER;
' }2 N- a7 S  V9 {) s3 S# k: ^Clock.timerId = 1;0 F% X% @) g, a1 N  X; ]

& S: A% d8 F. ^) |6 |- D' _0 u5 ]# `8 N  D! g: s& v+ A
/*: R' E9 r4 u' D
*  ======== Miscellaneous Configuration ========
& I8 M4 P) |0 S+ t6 r0 Q; e2 x */
9 v/ [, {+ i: W# G6 C
( {( f. S+ j$ x2 d! Y3 T# L* p/* set default diags mask */
7 ~8 b4 _/ r) t+ t# ?- pvar Diags = xdc.useModule('xdc.runtime.Diags');9 ~4 ?2 Z( H  j: I: ]6 X; E
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ U) z9 T6 ?3 K2 [1 j" c  o4 y
3 v. l: ?/ W* G  F1 L" r: d$ T6 M3 gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 P; ?) Y  v* E. {4 X/ bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 P- M1 |: K. Z3 e/ e8 }4 |) EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* h; c, [5 N7 ~8 A' g" u! `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( v6 O! [0 c8 {& j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' g  ~, [# ~! D4 k( {; P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* B) h4 l1 S, B, v1 V$ ?4 W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- H) e/ f: ^# y& C! }" J/ s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# o6 \: L- S! r! ^6 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 V' n1 X7 [' |" M  |8 m8 Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) p2 N  X8 w9 T
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: l7 ~5 ?6 R8 J! q5 t* h5 @; ^  aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' c: q( ?% i6 w" R+ Z9 e0 `7 [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  G" H2 }0 I8 L' V( `8 eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* K$ H' |+ o+ j9 I6 Y
5 s) L$ Z. r0 L( Z3 u
/* override diags mask for selected modules */
# q8 d3 j, P7 q6 {; Xxdc.useModule('xdc.runtime.Main');
/ D0 A9 E; v2 T  X; {+ JDiags.setMaskMeta(% G' r1 I$ ^& u! U
    "xdc.runtime.Main",
  a* D- o8 Q/ B! x    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 r$ v; Y! M/ I& |& F, q
    Diags.RUNTIME_ON
2 U$ J& B2 x8 j5 H' ?0 U+ _, v);
( o; z  }0 T) g2 R# b4 {6 W5 S. A3 S  d
var Registry = xdc.useModule('xdc.runtime.Registry');
! Y! o  e" c% k  g' C" IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 m, x$ a3 x# }! s' g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, v2 l% W9 ^5 x, X, LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 M. C) E6 \7 }3 k; u) r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% ^0 b5 T6 c. O0 @1 z$ x
, W5 b1 Y0 U4 W
/* create a logger instance */
) }, v4 I' L) r0 L' x$ |$ Qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 u# A  Q$ t! ~3 q! B0 J1 tvar loggerBufP = new LoggerBuf.Params();
& ]! _& ?$ t' y$ u9 iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// C1 }- s* W" L1 r  R/ [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# r8 n2 |" X1 b: J6 u3 q7 B. |6 Y& T- Y- S5 G
var appLogger = LoggerBuf.create(loggerBufP);  n' V# a/ V$ t* f
appLogger.instance.name = "AppLog_Core1";
, S* P2 G9 m7 X' _Defaults.common$.logger = appLogger;% G  T5 t/ [! T) y0 s
Memory.defaultHeapSize = 0x8192;   
+ \% `8 }" e( q6 ?0 l* _+ H$ tIdle.idleFxns[0] = "&LEDStatus";( f* x0 s* @! `; k+ P4 O6 ?; l
Cache.initSize.l2Size = Cache.L2Size_32K;& E# |/ `  @( t% M

% ?, M5 a. P6 u6 V+ r3 W. d. [) _
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 13:43 , Processed in 0.049691 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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