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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 `: s9 Z- k: w# Z, ^0 a" F/ i/ ^- P& G8 m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 Q& V: V1 ]- H0 y  R9 w; f% d+ R* S% E; y4 G3 X, c
其他程序段。。。。。
3 _5 |) X/ B8 Z% `# @% j, S0 E! \' P ! E8 B1 N6 T  W$ T. I7 ]
   free(x_d);) [# z" h& [* n* k
9 x' H) I3 k# b/ S8 q
使用DSP侧单独调试功能,验证动态申请没有问题,
! @- x8 P% s% z5 f9 \. e- r
& C9 X6 J3 ?2 P: f9 l但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 D6 I" u& B' j7 I

. r& I( K$ r, P8 D2 A9 T& S7 ?
2 m4 t0 t9 B- B% ?- A) I; V% u' v" J, y

: ^, |9 C& u* ]: c: ]* D! V
' w9 w# k7 v0 s# Z  W$ K' y6 A2 o
( [  y+ Q- S; ]7 t3 b7 N

" e* n& F& l4 f, o: R9 t, i: c8 D2 Q

9 ^" m+ w& N& U6 ?. n3 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: C9 z9 W$ h0 a* H; ?( h( P' w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- G9 m, N0 w" Y; J$ A8 N4 x: [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 B4 p% ^. t; b# x, p3 |; `7 Y# b

7 D% O! o7 l* y/ B5 m是不是需要在DSP.CFG中进行配置
& Y2 V" P9 N/ f! t! q- A我现在的配置为
7 T) E0 B7 |% y* g  }. X; Q9 n4 M6 X, D( I$ U
/*" G! |; E+ t* T1 d" k
*  ======== Operating System Configuration ========4 l, n: A' i* [5 ]( `5 E
*/
) K: @- W4 [/ D* R5 X. q% s1 m/ t$ _" K3 R
/* no rts heap */
; |/ U3 z) K- u, |/ v$ s" PProgram.heap = 0;; N) r* X; ?, w+ ?
Program.argSize = 100;  /* minimum size */
5 H3 g1 J. @* V* ^" c2 [Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# a! L4 d4 `' S5 o% C: ]7 H& U. L
5 e. r- [# L0 n5 A' B. B9 f/* create a default heap */' a2 e) J# i: l# i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 W: F8 x# k: t2 _1 c  ^9 m5 k
var heapMemParams = new HeapMem.Params();! k* I. N$ A1 u; c+ H' Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ s0 E0 o& w$ K: ^, u/ e# A" q

3 v0 \4 p- \" T! {- P  ]- p  V
var Memory = xdc.useModule('xdc.runtime.Memory');
" A$ `3 Y" a; O! h1 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 B8 d# D0 Y5 z* Z
6 t* j! f7 a2 ]4 s7 w/ E
/* configure System module */, z1 [: Y5 o/ w9 A
var SysMin = xdc.useModule('xdc.runtime.SysMin');, I+ u- L  f+ `- q0 V+ M. h
SysMin.bufSize = 0x1000;
4 ]% U' k9 q. w+ U, ~: BSysMin.flushAtExit = false;* I4 I% [! R. |; K: J4 E/ v
  _* I- @" V$ K3 ?1 ]0 R
var System = xdc.useModule('xdc.runtime.System');
9 }. s4 h# B# T+ LSystem.SupportProxy = SysMin;
4 P- i! T2 x8 Y' X$ [5 R% C  V" t( k/ {( z, k" x- l4 y$ T
/* configure SysBios to use the lower half of Timer 1 */
3 [4 N% k. U2 u/ B7 K! b8 Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. C4 |5 x  m9 c- n* R& g$ D' [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 Y; s' ~4 o2 YTimer.timerSettings[1].master = true;
- J- @5 N- m: M* J& B: ITimer.defaultHalf = Timer.Half_LOWER;
" b  J' K, s8 O% O! qClock.timerId = 1;
: a- l# \5 D9 e/ x  I% ^' M' U1 ]7 e9 H3 c

* v0 n4 G" F0 D/ q4 i' g/*1 Q6 Z  ^! O4 X4 ]
*  ======== Miscellaneous Configuration ========- r8 s- ?3 r: G6 a/ W
*/
$ ~  e& S1 `% m7 ?& J$ V5 }
% f6 e2 P! c! X- {1 I5 j. J+ n2 u3 d/* set default diags mask */
6 q7 v' S8 Y# I5 \var Diags = xdc.useModule('xdc.runtime.Diags');
* C9 L4 C7 o8 }  E0 u* yvar Defaults = xdc.useModule('xdc.runtime.Defaults');; u2 y7 c6 o2 {% y2 q1 ]
% O5 O9 `* F* {; l1 f" D% D/ S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" ^5 ?" B* A0 r' x8 D9 }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ m/ K! t# S- L% H" n! r& V7 }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: X) k% w9 @: p2 @6 t- l7 n7 SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 a1 P' U8 w3 q9 N. d5 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ Q8 Q9 m: k4 E  k( o- A1 I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: [5 }. z0 y6 y1 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. J4 C" S+ o- k% d3 H) s" J1 B
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( }, a, ?& S9 T- v$ w* p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( r6 n2 L) M. u. A/ j5 ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( t% T1 `" B7 Q1 O' GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# c+ Q; L  s- j- u  I+ S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 A6 w2 F* Q' P. ~% S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 r) \& n8 B; Y! A. k0 dDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 r& @( ~, C9 g5 }

1 C) J! m1 X6 A7 m/* override diags mask for selected modules */
! m6 L% ~/ A  R+ a1 Gxdc.useModule('xdc.runtime.Main');4 Z- B7 C: a4 R& j4 f& [
Diags.setMaskMeta(1 U9 c/ O, n* G$ C- y9 E
    "xdc.runtime.Main",
# n7 L+ j( {% m6 O; ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! s5 [; }! x: ^! v' e# V    Diags.RUNTIME_ON' k6 L5 P9 l6 b% o) W/ u$ [1 n. J
);/ F$ m, d, p8 A- Q; w/ O

" n& |+ d# F6 g  D$ Z0 G; C8 p* T& Hvar Registry = xdc.useModule('xdc.runtime.Registry');
- c2 F: M2 i7 j) e5 q6 `( @2 m# WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* B$ n0 [: P' }3 ]/ MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" b+ V5 F/ `3 X9 U" ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 U/ Q  m7 k1 K
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 z! q. d# Y- q# a- ?

# I, L0 H2 ~- n6 m- V$ I# p/* create a logger instance */
+ `: R4 `4 ]. [" dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. m2 P% a) H( @
var loggerBufP = new LoggerBuf.Params();7 i/ y+ N% F6 P: w$ @1 w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* H$ J8 g2 S3 ?4 S" z- U) j: }+ CloggerBufP.bufType = LoggerBuf.BufType_FIXED;* J+ N# x. T! o; g$ o

$ z( E2 E4 A3 v) m: Q5 }var appLogger = LoggerBuf.create(loggerBufP);
7 j. Y- D# ]1 ~- `appLogger.instance.name = "AppLog_Core1";" f! d. p: n9 V
Defaults.common$.logger = appLogger;
, t7 L3 P) Q5 Y* _/ l: |Memory.defaultHeapSize = 0x8192;    . {4 f' a$ y* j- k/ [
Idle.idleFxns[0] = "&LEDStatus";
1 H; G! O" _1 O6 UCache.initSize.l2Size = Cache.L2Size_32K;: w( z0 ^) c# `

3 h) C  f1 I' k3 d$ h# ~" n/ N% u
回复 支持 反对

使用道具 举报

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 */5 U& l( x: G& s* j; \3 d, b$ |" P9 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; p0 T, b  Q) H+ w2 g0 i! d, I
var heapMemParams = new HeapMem.Params();! j2 a, L  d& L% M
heapMemParams.size = 0x4000;- ~9 Q; [& j) R. a$ S" X  U
5 i: e1 n' }$ g
var Memory = xdc.useModule('xdc.runtime.Memory');
8 \* b3 I+ V. J: I- D4 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( ?2 r: Z5 C8 r
! r* t  @) d8 k1 m" R; T2 v- C
我大约calloc  每次共计大小为5K*16bits,, Y6 b( M, O7 D+ l. n9 `* v* ~
而默认配置才0x4000、需要改大。# o7 @% g3 h: `; O

# x' N% b& h( y; W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: \, L8 n2 D- l- `* ?# o4 `$ a
Program.heap = 0;; b4 n, s0 p! M. q0 V
Program.argSize = 100;  /* minimum size */' l, L/ o* a% |/ @; A  ^
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-10 18:30 , Processed in 0.041112 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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