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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* C" U6 n' g  j5 H, o
$ k" L& L* z7 H/ u, b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 n$ a4 k. n( I$ s) h1 h  |0 A
3 D, e$ i0 p5 s) ?9 o# M5 H: C
其他程序段。。。。。, N2 w9 K, @+ U$ w2 ?

& y8 o7 M( P; X4 X; p; H9 Z   free(x_d);
4 S  W' w  F9 \1 _- s: B2 X2 R
: Y+ R: p' U- a; ]2 U! u使用DSP侧单独调试功能,验证动态申请没有问题,
1 [2 P9 V  c4 s1 P$ U: l; n: `
; Y* Z& w! i8 k/ T3 v+ z1 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 k1 {7 R* W' A$ a; |6 {( v
$ [" l, N: J; q/ f/ S9 _3 ]$ J
* O# m; {7 L, Q9 P

$ w; X( ~3 s/ M: a; G
- Q0 d$ S( S2 g$ G. R9 X) s3 \' T9 z9 h( ~, W8 W- q  ^
/ Z7 F+ n; i& p) T; B0 Q0 |. |
" e5 f. f- r; S& B' v! X" b
3 N4 y7 I% X6 J% J$ h8 ]. Y

; C& [/ s+ e" S% o1 I' }( e7 `" h' p3 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) p  P, f8 N$ }# N( T/ }7 x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& L$ b9 d6 g# V5 p3 k: e6 v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( ?3 {) O; I5 l% x0 r. I
3 F# ^: n' a4 T$ K4 [
是不是需要在DSP.CFG中进行配置0 w8 p. L; L- L/ d0 u5 [
我现在的配置为
& [$ O( Z, ]+ }/ H$ l9 `
  F4 J% ]8 B/ M/*1 o5 m% i! y8 ?1 y3 f- v) G
*  ======== Operating System Configuration ========) j; q1 ]/ @  Z9 G6 _5 {
*/
2 Y' A1 |5 F; q
& {6 R( Z9 \+ b+ W( z/* no rts heap */
9 P5 s0 `# d% d7 `" _9 t1 K2 h5 g% a2 dProgram.heap = 0;
* v" K( m! S( r3 X0 X3 |: }# aProgram.argSize = 100;  /* minimum size */, A( i, j! Y5 A" t+ I% N$ W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 q# x, o4 X' G0 K& z# k3 w

: z) C3 Y" q! ~! H! n" ]+ ~/* create a default heap */
: T: A3 v. b# D, tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 T  D' \! X! ^7 n- g7 wvar heapMemParams = new HeapMem.Params();
% n: v% `1 x  I8 F9 d" h) yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 z0 I8 O% R, F

0 y7 |5 m( `) U( o9 I
var Memory = xdc.useModule('xdc.runtime.Memory');+ X# ?, A& }0 N% r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) [- Q) Q1 ?. N5 A: T8 ^1 @* W3 ]! z% O; |% l7 q3 A
/* configure System module */
  }7 d7 \7 K9 d8 G' p- M/ E8 O5 Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ x9 u9 H8 c8 a& wSysMin.bufSize = 0x1000;
! X; G/ Z$ O8 t) x  r9 X4 w$ lSysMin.flushAtExit = false;
# B: K2 M- y& \( a/ ^- p, u9 S& j7 ~' o* x& l
var System = xdc.useModule('xdc.runtime.System');
4 a& f1 J& }* M" F) }6 r* qSystem.SupportProxy = SysMin;) ^; i- b* d$ }  ?* A

5 ]: z! I! ?& P) H+ D# |. X# F& t/* configure SysBios to use the lower half of Timer 1 *// E# i2 \, w. c+ Z" N2 b1 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  i6 e7 ^% H* q8 j/ `- Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ L1 J4 _+ }# n! f9 f8 dTimer.timerSettings[1].master = true;
4 [  U* R7 v: @# J- tTimer.defaultHalf = Timer.Half_LOWER;
2 z. ?0 \; a8 a" Q3 ?! ]Clock.timerId = 1;1 h! x0 F& N* A
# `( `# F7 t$ `% ]

0 [! F% A! ?0 t7 L) M9 t/*  X, \- }1 T) e; M, K" R
*  ======== Miscellaneous Configuration ========4 a8 q& i2 u" _( H# `2 Z* e. F
*/
- g+ Z7 Y# l! ~1 e7 N% ^8 T7 S' l5 Z, f; |7 J9 A
/* set default diags mask */: ~: a! r4 d$ |
var Diags = xdc.useModule('xdc.runtime.Diags');
/ s! {; l! X$ X. i- tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
$ a- F! |* n- c# h9 B8 r, E2 _! F5 u8 k" a. s' X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- G4 F" ]! E8 U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! t4 U& Z0 m% a& Y" oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; |3 l: x$ C) T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 L8 r! x. S" o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, U/ h6 z- v( V' [6 j. k' N; @Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 ^5 k: U" u9 w/ PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# i& }* l% a2 y0 q3 Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" ~7 p, A, }8 p, N, t4 s7 W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  u( R" |7 K% P3 F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" }  }6 x# o/ N( YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! l. O1 s! ^+ H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- C2 b+ f" [+ y* {) r1 o, @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. P( G' H2 z  i; _4 {( j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 c$ _4 w9 r3 |. F

% U% _- ?$ S% W: T  v' _9 T/* override diags mask for selected modules */6 Y& T9 ]4 k& _' {/ k, u
xdc.useModule('xdc.runtime.Main');
5 B. R& c0 h3 o* m/ s0 t/ XDiags.setMaskMeta(
1 p5 b9 g" V% G" u8 p    "xdc.runtime.Main",7 ]. X# |; b: m7 S: m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" s& O( G, `& T. R/ z9 a! E1 ]    Diags.RUNTIME_ON
/ u) K; z/ O2 d4 k- N);
6 O7 j! z- G0 A% M0 X# k9 W  K' }. H1 }8 d: C9 v$ r0 ~
var Registry = xdc.useModule('xdc.runtime.Registry');9 s1 j5 U; e6 F3 R& a( @+ `6 F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  s, {7 @+ o, e6 S+ ^* y7 T/ u; p
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% g7 h; K) @0 j9 s( sRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, U* ^; L! J4 y3 uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ d2 K! j0 U2 E1 \3 B/ s" Z$ P" Z% a8 E: p5 `% Z
/* create a logger instance */' {$ H# z: J5 [+ f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; Q: `4 C1 s+ @, v
var loggerBufP = new LoggerBuf.Params();- J0 J( B6 e3 [5 J  L" h0 _0 n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 L2 H$ Z+ B0 C: \6 U
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& z: ~/ X; ]) [! p' H) c2 n
4 x" C1 K! O$ t1 w, nvar appLogger = LoggerBuf.create(loggerBufP);
) m$ ~& A5 x/ e4 dappLogger.instance.name = "AppLog_Core1";6 |9 l8 m4 h5 E- k6 e8 \
Defaults.common$.logger = appLogger;
0 @- f# Y; @8 T: s: y5 TMemory.defaultHeapSize = 0x8192;    9 b( L# |" @. |" B- q/ m0 a6 E  f8 q
Idle.idleFxns[0] = "&LEDStatus";
* j3 h1 w5 O  R) ]( P# f9 rCache.initSize.l2Size = Cache.L2Size_32K;
# Q8 f' y) ~4 }* K4 l% i/ \$ U
0 s; f9 ^" F; k1 g$ Q( L/ {& l( r
回复 支持 反对

使用道具 举报

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 */
& _2 ]/ U7 y: X. m( j5 gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, V! }6 ~8 ?' c; Cvar heapMemParams = new HeapMem.Params();* u4 \$ g( o) g0 |! X0 U
heapMemParams.size = 0x4000;  [! M0 T; o1 |8 H3 l

; H3 s  `" i0 [; P& dvar Memory = xdc.useModule('xdc.runtime.Memory');2 V/ X% ~$ u( f7 E1 G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 s0 e1 ?5 Q  K% Y8 e0 z$ Y  z
. T: C8 r& d" c* V% L9 d. B我大约calloc  每次共计大小为5K*16bits,! ~+ u; p5 d* Z( j. m8 ~
而默认配置才0x4000、需要改大。$ @: N0 f6 O7 \9 A- V9 t
( d' }; a3 |5 M) A0 ]# O" u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 }, y9 f; r$ e8 }; K
Program.heap = 0;7 Q; ^& Y$ S, \/ f5 n. C: h) }0 u5 b
Program.argSize = 100;  /* minimum size */
) Y; T  Q* u' f5 T, U  pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 13:18 , Processed in 0.043217 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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