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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- n; s2 n" y; i! O5 f; E, Y
% ]2 d) o& c* A; N& n
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 k2 l, Q5 h, F- \+ B
  y1 r; n9 H9 r2 [5 k0 Q2 Y其他程序段。。。。。% A6 g7 H4 B) v. A5 `. c1 |) k

. e4 a( w  h. m/ C- O0 o   free(x_d);; d4 L# a$ H5 m/ \; e
/ v# M# j& Y& R+ t  s
使用DSP侧单独调试功能,验证动态申请没有问题,' U3 _# r7 j& C; l% P+ |
+ E6 u* Z7 Z  `' C) d2 z  E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 z0 B. E: h( A" S

4 }" @% w' J+ z* s9 V
6 Q! ~; ]$ q  H! F5 b# X$ K) Z5 ~9 Z; ^" n% q

2 y) K* q, v; S3 i+ s# _& z* A5 t9 ^6 c( D  g1 m' u0 ]

( x" ^, o/ a- \3 j+ Q
5 q( T# R2 T% K9 [8 E1 K. W0 E. `1 W- s( y5 t. |) i
; K. f$ b- P, k3 @3 H4 H% a
9 p: |5 Q( {3 a( N- s2 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ p+ Z& a: U! v1 Y0 |4 z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 Z( a, k0 l% |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- u2 x6 h; _" c4 A; g
3 A8 S2 h' k3 T' {/ d; U" [
是不是需要在DSP.CFG中进行配置% j4 b* e  z/ C
我现在的配置为
$ p& }3 d1 K9 B
, ]5 e6 h$ Y: o- n/*
; q4 u2 @0 k# b3 W/ | *  ======== Operating System Configuration ========# ]6 a0 D) D" J+ ]
*/3 i/ t; {3 o7 I& `6 G* q0 f9 T

, l2 m; k% S) ?1 q  z( ?6 }/* no rts heap */
" z' }3 i" E, n6 D* JProgram.heap = 0;! ^/ d9 Y% z4 f2 K; W* U
Program.argSize = 100;  /* minimum size */
" c( B5 A  G- q% tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, o9 i. F& R+ E  n1 v

- z+ H* d! B. o6 v9 S/* create a default heap */7 z- s4 ]0 A0 C; R& z2 y3 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ ?/ x! i; ?( B! c
var heapMemParams = new HeapMem.Params();. {' L7 t. h3 V  n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: A( ^' A' O" G, R: p# a2 b# e$ L( n- z
var Memory = xdc.useModule('xdc.runtime.Memory');
; W7 F9 y! e: m  O; H0 A! pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 N# [3 `4 I4 G4 D  W
/ S5 X- a! y: ?( J2 S
/* configure System module */! V; `) Z4 A7 X8 u
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 Q3 l/ M7 `3 o  S* ^$ J. f
SysMin.bufSize = 0x1000;( V' F& Y/ z2 `- o' p- n7 b
SysMin.flushAtExit = false;
; h" W; ^4 \% J' g/ p0 a& i" P% ?  Y2 x( K. R- I
var System = xdc.useModule('xdc.runtime.System');
% p: Z( |; x+ l+ K0 l1 F* o# S6 ZSystem.SupportProxy = SysMin;
* {1 J( J5 O, f" x
- `# x5 g9 H7 M$ ~4 F2 t/* configure SysBios to use the lower half of Timer 1 */( z0 I9 m0 M6 Q' f1 _
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" c- z. m8 f4 N6 {/ u9 ~  Z- pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 F, z0 C+ b9 x2 p
Timer.timerSettings[1].master = true;  K4 ^  k" Y- V; W
Timer.defaultHalf = Timer.Half_LOWER;) e( R  j7 \( j5 o" H, f
Clock.timerId = 1;; W/ l9 a' o' x) K
$ \* p; Z5 T- K/ w% D
/ N) H" a5 m2 O
/*
  L8 w# x, P& G *  ======== Miscellaneous Configuration ========
) a6 N- m; k' v */, e& W% u$ z2 U( D6 k  _
* M3 x. u9 y5 q' D( ]: {
/* set default diags mask */0 v! h4 b4 `" ], m  z. L
var Diags = xdc.useModule('xdc.runtime.Diags');
# g( d; Q: p( I4 b  tvar Defaults = xdc.useModule('xdc.runtime.Defaults');  E* D( ]4 g3 s) N" p
" `$ f8 a9 h8 q9 v% j$ x( g( F( o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" L0 d! Y: K; p1 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ n3 d; ~' I3 B6 B( W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 }4 ]9 X) ?% e/ K; x+ ]8 ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 L+ w6 {5 S6 \" I2 ^5 bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 b# V4 }2 X0 f5 ?% Q' u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 \- v0 d7 m: Z8 c8 N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( l# C5 T% q& n3 ?5 T8 w) {% _
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  q, ^4 m  Y  |9 s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 l3 F2 [4 V( z) E& ADefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ L; M" W3 ]+ H9 @$ r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 V  H* U* E  JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( _, }6 |7 z6 T  W! E* u! _$ WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; X; D' B6 e/ M1 B: ?  a/ x4 pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" j# L2 l* o6 S1 y8 @

' [0 `" g$ X$ Y/* override diags mask for selected modules */8 L2 J. S% }2 j& L
xdc.useModule('xdc.runtime.Main');
% ~* M  Y: Z- YDiags.setMaskMeta(. E/ H! }6 M8 m% H3 ?4 V
    "xdc.runtime.Main",8 x2 X  G& f0 M8 I6 m/ I- S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 Z- Q1 ?& J1 ]. c0 Z0 U" Q/ T
    Diags.RUNTIME_ON  Y" s( }" w; L3 `+ l5 a9 x
);
0 \6 K5 u$ ?8 R; @% i3 b" P5 q, Y( M0 ~: [  k! C# ]6 n  ?4 X
var Registry = xdc.useModule('xdc.runtime.Registry');9 G  I1 G7 Q- |3 r) f, Y0 i% l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- J1 C) e2 F& n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* W: q: S! F+ N+ C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 C' u3 P- p& ^7 E4 c' }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 u9 ], _5 Y3 c- x+ }
, d- K7 m" {' g1 O; Q
/* create a logger instance */7 m- `, i9 d( s0 K8 R8 D, T  t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 }: B1 n- R1 [( I0 _4 Y2 W' l+ I
var loggerBufP = new LoggerBuf.Params();. r6 \, e( I' f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" e6 p# b4 Q' F/ N$ g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" N  h$ I: X6 W7 g& T4 T
0 Q. [' G3 w1 b/ tvar appLogger = LoggerBuf.create(loggerBufP);! K/ |1 @" r. I9 O7 p( x, v, C
appLogger.instance.name = "AppLog_Core1";
7 z7 e5 U/ N6 Z8 m" kDefaults.common$.logger = appLogger;7 e' _  [3 K: r1 i
Memory.defaultHeapSize = 0x8192;   
1 h; |$ J8 r: U3 n2 d. wIdle.idleFxns[0] = "&LEDStatus";% W( u! d. a: t5 B. G9 G8 L
Cache.initSize.l2Size = Cache.L2Size_32K;$ Z5 x9 b4 U+ g$ v- I! L

$ j* A8 x/ L8 S! |
回复 支持 反对

使用道具 举报

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 */
( F  [5 X  ]3 Z( o4 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 E, C6 C% k' G- z& ~9 W
var heapMemParams = new HeapMem.Params();6 J# L5 Z' H9 C. K  B+ U/ @
heapMemParams.size = 0x4000;2 U! H  q" W! V$ E. a# N: q

  d$ |" O3 e8 S! M; E: t4 Qvar Memory = xdc.useModule('xdc.runtime.Memory');9 }1 M; w! S: H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' Z" z: x5 Z3 t# E6 A
1 }, ^0 e6 v5 ?3 s我大约calloc  每次共计大小为5K*16bits,
2 q4 z1 Z" _9 z8 D- F而默认配置才0x4000、需要改大。7 ^1 q- s7 U0 q9 Z
: F6 \, t1 T$ x/ `1 Q$ E8 ^( x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: {* z( M: K$ F7 A9 W" s/ J
Program.heap = 0;& `6 K3 V6 k* G( s- D& Z) m3 \, W
Program.argSize = 100;  /* minimum size */; W( I% d1 |: [4 j& j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 06:26 , Processed in 0.043773 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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