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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: k, s. ], e, C& E+ j  I. a' J- B
9 t" ?% ]: _8 }" e/ o, ^. |/ I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# i- Z0 V1 u; _* O7 [7 O

- }* O' Q9 C9 n1 P% j其他程序段。。。。。. s3 F" b/ g& G, K; Q

# g1 ]0 W  m+ e   free(x_d);
0 T2 S1 g1 @0 ]  {/ |) k- K( ~1 e( i+ C& d" _* Q
使用DSP侧单独调试功能,验证动态申请没有问题,3 m" F. p, r- C4 ~$ |1 B7 n

+ T/ c( n( {& ^) X  t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. `: q2 K( y- ^7 D

5 `, F* m  S5 S1 g+ a' k0 ?  V2 @& x! h' ?$ f* E5 Z( m

8 V$ }' {7 B( u, g3 L. w/ W3 Z/ F) c( V' p6 K. A
6 F0 s6 J+ m8 m1 x7 D( I

+ l) Z8 p5 [. x( f9 i9 C& p% M- l  _; ~  t

' j3 s  \" d/ s9 M- ~
6 U% Z/ V0 F+ }7 S0 P9 Q
9 ?2 l2 L  T. H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- b( W4 {9 K5 m  e7 l2 v我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. T2 p" B- l, s2 q- ^0 d! ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 i' F2 u+ w; @8 a7 w
$ z5 V" s, w  d
是不是需要在DSP.CFG中进行配置! p. q7 t6 O9 G" f* Y
我现在的配置为" W( W, u3 t, v8 U. I+ Z* n

3 q) s5 W+ a( R9 d/ R3 O8 F8 V/*
- M3 k1 v5 c6 O( h, X *  ======== Operating System Configuration ========
& O" s; {. i3 ^3 K */- ~# e/ h* Y' k, j

' X; E- p  ]! D7 _- `5 [7 \0 l/* no rts heap *// x% p9 \% d- X: w2 e
Program.heap = 0;
2 H# p& h0 [6 d# D7 k7 [* G6 WProgram.argSize = 100;  /* minimum size */- W$ Y, E% s7 J' G, ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 ?  u( z0 `& d4 i  q' G7 S9 [

. ]6 s3 d: s) G# S/* create a default heap */
, I: G: i7 Z, Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 g3 M; t4 m9 l7 \$ Jvar heapMemParams = new HeapMem.Params();8 f4 z% w2 r6 u! D  Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( W( u/ S% n/ h/ r' W% f$ a2 G+ Y+ d
var Memory = xdc.useModule('xdc.runtime.Memory');
  r! X/ U0 E1 ?" MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" R% Q  x6 n+ r8 ?0 e1 h0 I

! t2 M- I& ]! n1 t( ]( e- h5 f/* configure System module */- S/ J; h& G' W' P! R- P0 f2 G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 p: [$ Q' j+ v) _/ ^" q% E9 GSysMin.bufSize = 0x1000;
2 B3 X) b& I. ?$ N& xSysMin.flushAtExit = false;
5 V$ E( F$ d. r* g1 j/ M% f! E/ f7 `1 J, x7 i+ h. j
var System = xdc.useModule('xdc.runtime.System');
" i1 V2 q! t3 @0 e" {System.SupportProxy = SysMin;% Y8 f6 \  q6 C& B) L( @

% N& \( v8 t3 Z/* configure SysBios to use the lower half of Timer 1 */
9 h! E, ^9 T2 W1 ?6 C6 [5 q- H. Hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, t8 j2 K% M4 D- s  f5 q. a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* H1 m% P  x' Z9 A- K, ?! I
Timer.timerSettings[1].master = true;
; o, j- e4 d4 @Timer.defaultHalf = Timer.Half_LOWER;
. Y# t5 |% {$ E7 c# AClock.timerId = 1;, R% F% e: i, w; f7 W

9 [0 `# o% K/ u6 q4 A
) `" ~  _6 k4 E2 c* M$ m3 s/*
9 d2 X/ U  {5 d+ U *  ======== Miscellaneous Configuration ========* j, A) Y9 `9 I) l; `1 D" k
*/
  M  Y: W3 m7 d: f: m
. c$ F6 r2 H+ I/* set default diags mask */  b, a( p8 F5 s% P7 o3 Y! d
var Diags = xdc.useModule('xdc.runtime.Diags');
& ^' Z& [; Y5 jvar Defaults = xdc.useModule('xdc.runtime.Defaults');) q& l3 S% g. V0 O* @/ H4 k1 k

! q* a6 J( E% H9 B3 b5 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& k9 \2 P( ?- {% o2 IDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 `" }8 `, ?" R. Y( O; l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; ~! m4 t3 G, q  }+ a2 w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' A2 c2 j. X( t7 _& T: s2 MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ E- T( |+ K, J. T! J& H( N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, T5 g$ r5 s' _$ i4 s, P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( Y4 ?  B& z$ K) B; u$ ~) b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 s- b, [$ M" u5 P$ f* w5 C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- W2 D3 I* p3 |+ E( |5 L! b! ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* M8 _) j4 O. j+ y. ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 x. J2 A% n" s1 vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 g; z1 T' d0 N1 f3 \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! N) W. i/ E7 O/ }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ u7 N# u' X6 d
, j) i9 R+ v' l: p" _$ m9 n/* override diags mask for selected modules */* ^: e, n8 G, B- n& Y% G
xdc.useModule('xdc.runtime.Main');1 `1 J3 p0 V- l3 p
Diags.setMaskMeta(
# d" s. p: f' o" D5 c. d3 O    "xdc.runtime.Main",
3 s$ e! G! H+ Z: h* k  |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 V/ N6 ~0 L, g6 B) b7 @    Diags.RUNTIME_ON9 U. p  s/ v: V2 T
);; j( I. j7 ?7 |0 F* z" K
% Y2 q! f* e: S1 q/ i- J- h5 |. S& Q
var Registry = xdc.useModule('xdc.runtime.Registry');
% w; t1 Q% }* cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 ?2 p! E* b/ K& U- k4 E6 H, cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  g, S5 m- q. y3 X( DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* T2 t: Z* n+ m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. F* p  |$ {6 M, I# _2 q4 u  i* c, p
/* create a logger instance */
6 {9 @; F( Y4 ~# O3 O  kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' g; h8 F. K2 f' o
var loggerBufP = new LoggerBuf.Params();
3 d2 v  [' I5 `, q* \0 T& HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 B6 Z5 E) N; V/ z6 v; g! ^3 ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
0 X! N4 N1 X4 K; t" G( ?, [7 W  X1 w0 a- J, n) ]
var appLogger = LoggerBuf.create(loggerBufP);
+ r; \. s$ Z- p5 U2 ~$ t' bappLogger.instance.name = "AppLog_Core1";$ U; q/ X4 V) @4 ^6 K) g4 I1 O, Y3 F" v
Defaults.common$.logger = appLogger;
7 ?6 \* u' Q: t! cMemory.defaultHeapSize = 0x8192;    " I7 F! W9 n( i
Idle.idleFxns[0] = "&LEDStatus";5 @8 V( m& t9 U! M& [
Cache.initSize.l2Size = Cache.L2Size_32K;0 D9 z& {- p( i" v& _9 A9 b0 Z

' m% J% x2 u: g4 F
回复 支持 反对

使用道具 举报

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 */  w1 k: o% Y( Z4 p9 ]4 W; c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 p; v, w: u& s$ Z( {" ovar heapMemParams = new HeapMem.Params();! y0 n, R, K) W5 H0 P+ C5 X
heapMemParams.size = 0x4000;) p1 a$ E* p  q
# f8 A' k( ~8 {" x
var Memory = xdc.useModule('xdc.runtime.Memory');7 j; N3 T/ j5 x' r8 ?3 B: ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 c: T+ U0 K8 K/ e2 @  ^
; m% L2 L4 Z+ m4 B/ P我大约calloc  每次共计大小为5K*16bits,
1 j+ `( U% |% M/ f1 S而默认配置才0x4000、需要改大。& c- L5 j$ E0 {  a* d0 ~! a+ ~

: K3 K( `# s+ q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- k- S: d: C8 X  Q1 n: \Program.heap = 0;: ?; O7 ^" L- x6 O5 J; t% D- K
Program.argSize = 100;  /* minimum size */
4 g2 G7 }3 U# w6 q. A2 i$ IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 05:58 , Processed in 0.039960 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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