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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; f; [5 e7 y$ L
# I' x' S  I' v6 N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ Z0 @9 T. U) Q1 m  D3 J
. l& F7 w& @1 i1 I其他程序段。。。。。: w6 n: _4 f8 c1 s8 S2 V% ^
4 H, _% j" r# |/ ]9 `$ Q
   free(x_d);
; r* a; J% a7 U' ^. N" z5 ~+ n6 E1 Q$ ~" m3 E9 x
使用DSP侧单独调试功能,验证动态申请没有问题,
2 Z" w6 X2 }+ X+ z& p$ g5 @4 F
3 N  k0 ^& j5 |; b- q  a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 U' y% {" {- k. J  j
# f& K  y, l* w- ?. v& P3 Z
" G- g! S1 h" T2 M. T) m
: T3 s7 X: H9 M. v

; T) v, x& v% d; z# o) g
* d/ n( M8 c- i
2 R5 U6 b2 j2 W; Y/ ?+ F6 V( V- |% t4 E" x! _$ X. Y
$ N3 H9 g, J, m' A$ X( ~! q* b- ^
1 w" b9 w8 j  d- w

) u! n: l% t, O+ @8 r! X8 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, w( C. S9 S' Y9 P6 X9 o+ b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 G; N" b% R, D) E8 _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' ~5 M( M/ W' |& }7 M! `
1 r: g1 l) `5 a. K
是不是需要在DSP.CFG中进行配置
' \! u  x7 a- E7 A我现在的配置为) f4 l& {0 {' b
4 F) Q, D' k4 ~2 F' |
/*& o& \& Z& Z2 ~4 b" G& _
*  ======== Operating System Configuration ========' F6 n# u; j! R" E* P( Y
*/
8 f# D& n$ I- G8 P1 d- A! ~# x# J  @* g9 x. l8 ~1 J
/* no rts heap */; V# T6 k- P' o2 i
Program.heap = 0;
5 q2 M6 z6 [; o/ `+ F6 y& w% [Program.argSize = 100;  /* minimum size */
: [4 m4 N$ ^% O7 l( }$ dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 @  N7 M0 O$ Z% Y
3 }: H. M2 R2 n6 \% z# a
/* create a default heap */) C! d5 w7 @& ^" ^" T" ~$ O: t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 D3 J! h1 Z; g- Cvar heapMemParams = new HeapMem.Params();
9 V7 L5 g' J* eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" I% N; p6 K! e- R$ I, D
" q  u9 z0 g% o4 Z1 r" @2 M
var Memory = xdc.useModule('xdc.runtime.Memory');
8 N. V. u- B& f- UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 c6 Q& Y  J' {0 @2 `& p
# |" j( x0 D5 |: A" z/* configure System module */7 i% x4 S! v- Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 ?. I7 a1 _; BSysMin.bufSize = 0x1000;1 ?3 @9 ]+ j" c  K& a1 P" A( P; J6 v
SysMin.flushAtExit = false;2 Y. R/ i. v' [. h) ]* e8 t1 l
3 e( R$ r% A- c4 a) b
var System = xdc.useModule('xdc.runtime.System');
' r: p) K9 `( ?( ?2 K6 NSystem.SupportProxy = SysMin;0 n: m/ p2 n2 B6 m# z1 Y4 k3 _* v
/ P: k' p; T7 a6 b1 A4 F/ v
/* configure SysBios to use the lower half of Timer 1 */
  _, M/ G) d6 [& [) m6 }: F- Y" vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 e. N9 ~; a8 ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 |; a8 N  ]$ D8 uTimer.timerSettings[1].master = true;
8 U' J$ _) e- A; Q, m: s; O* OTimer.defaultHalf = Timer.Half_LOWER;
& V! R" K; c6 b& b1 gClock.timerId = 1;! O$ ^2 b5 o& K7 p8 C' _/ m0 T- {
6 X5 k0 U5 \# n( W+ T

, ~# D4 p3 u+ n0 U! P. Q/*  A0 N( \3 Q/ c; Q
*  ======== Miscellaneous Configuration ========
8 E( G, b+ G1 _2 y$ }3 m; w: q */
+ M% L* f/ F2 i& E' j  P
) S" c1 S" p! w5 s9 \6 o/* set default diags mask */
! V/ f7 c, ]  T) [' hvar Diags = xdc.useModule('xdc.runtime.Diags');+ h. ~# L0 ^+ U9 p. l) v. L
var Defaults = xdc.useModule('xdc.runtime.Defaults');% q9 r, k6 A( Y& T2 d6 e6 m% ^- o
0 q% X6 b1 q- C0 r+ h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ K9 ]8 f% j: e5 p, N3 _; }" K
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 t3 r4 w- A6 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% g2 ?* p' Q- b1 N3 LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( c; g/ w# I; c: d- J, h  wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& s# V3 C! w" W! w1 w% KDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! m3 F& x0 U7 V8 w& Z  b9 g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* g1 h& I) w# A! X, ~. Z2 N9 rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 ]! [8 ~* j8 ]' x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* E* [% A4 T$ |' h' X" R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" p1 s6 ]6 L$ K  x1 t2 U) h" O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& C+ m* F/ k$ E% H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  ]8 X5 n2 n, T' ^& Z: L, ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 e/ W* ~. S& s. o& Q2 |/ zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ G. ~. y* `+ H* V  `1 x
' H$ U# N5 S3 ?/ B+ p5 m/* override diags mask for selected modules */! A7 V4 m3 X) @+ b7 i
xdc.useModule('xdc.runtime.Main');) ^) d. I9 p3 d
Diags.setMaskMeta(
3 s( v& L+ B* ~6 F1 f$ x+ \    "xdc.runtime.Main",3 G, ?! |+ X0 k/ Z; d% f
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% e1 u7 m/ @4 O( k% x
    Diags.RUNTIME_ON; g5 u, e3 J; i
);
4 W6 {1 h+ ^7 y' b
, v+ v. H8 }: N3 B7 tvar Registry = xdc.useModule('xdc.runtime.Registry');
6 _# ~, Y+ W; b" t, F1 wRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ t8 Q' K# @- ^2 ^" j$ {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* c& Z7 @& W- N9 }. T4 E- s* _4 h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% D6 J3 f$ O% d6 K2 x" GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 c" N) q+ I. y2 Q6 v1 O  ~( n( ]
* A: F9 ]5 O8 k: K' }
/* create a logger instance */
3 u  J, o2 t- M8 Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, `" \# X3 l/ w& e! ^1 zvar loggerBufP = new LoggerBuf.Params();" ^2 _( e" h! E, v$ Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ R* a/ H: v5 M; Q/ I/ yloggerBufP.bufType = LoggerBuf.BufType_FIXED;% @# [8 V# R: u/ Q8 @/ b0 \
" k9 T; k6 y. Y  d9 j! Q; \, g
var appLogger = LoggerBuf.create(loggerBufP);; L  h, j" Z/ K* }( S) g
appLogger.instance.name = "AppLog_Core1";' e" S2 r+ B8 d! y2 \/ _
Defaults.common$.logger = appLogger;( X" R' }: l7 W+ }% e9 {
Memory.defaultHeapSize = 0x8192;    5 m0 K; n0 W0 S) W$ J. C+ d
Idle.idleFxns[0] = "&LEDStatus";- t' A3 f& K0 ]! M. s* I+ }. A
Cache.initSize.l2Size = Cache.L2Size_32K;
+ v9 p) X* t' S1 F/ A; P4 V
( d4 o& d9 \) B( t
回复 支持 反对

使用道具 举报

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 */- W! z9 s0 X; V2 x+ w% P/ c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ N+ }1 J7 L/ B( I. ?! s: H$ Lvar heapMemParams = new HeapMem.Params();& ^. K5 S% q" V* w% I* l+ [8 w; R
heapMemParams.size = 0x4000;3 D5 o1 m! }' Q* X8 b: H
( @, @4 C# L! g: f* s& z
var Memory = xdc.useModule('xdc.runtime.Memory');
# H0 ]+ E# F% r3 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! Q& d& |' y; ?& A: M9 L7 Z( H

8 B+ n6 Q' h' v, `/ b/ r$ C我大约calloc  每次共计大小为5K*16bits,
7 y( N. ~* V7 y8 |而默认配置才0x4000、需要改大。) k" H' A( q7 i8 m- C* T

0 ]  x; P" V; a& o2 G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 ]6 {! C1 ^- z  X% s; PProgram.heap = 0;' z2 Q) Y0 p; w, t2 y9 y
Program.argSize = 100;  /* minimum size */
" [" M# y  T  `9 Y4 P( E6 WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 16:29 , Processed in 0.042026 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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