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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 {; L6 e. |0 w: `3 y6 r

7 r3 c6 X! M# o" V4 w" C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& |; N# H6 m/ U7 Z1 j) ?
/ L9 v4 F) X5 s1 X. L& i2 d
其他程序段。。。。。
5 b2 L: Z& |" W  {: k/ H
4 G& Y6 ?: R: n- A: C0 n   free(x_d);
* I) _( \9 `# A# B  H, s( L
" w& ~# A0 l: A, @使用DSP侧单独调试功能,验证动态申请没有问题,) r1 B8 S, S0 K% N5 x! b* k# l

8 O/ M3 f* J3 V( V2 X4 b9 N# u2 R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; l6 W! \: e; p1 y; U. V/ D

, W, M8 b- I# h. y' ]; O4 T7 K
9 h( k. b* w/ C( |, h0 ]- G8 m7 D& G9 I$ t

  M1 O) v1 V+ s& c
& x) |$ H6 A3 U; {4 A; K6 T
, f% i; W! w/ ~6 Y3 c# i5 n6 M2 }1 t5 ~) Q* p5 f. r$ B
7 m* Z3 C5 D, m- {

1 X8 D+ v1 \4 F* p( ^8 i5 t# M2 n/ n
5 k) e; \' a2 \. o" Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 n) Z+ H) \& ^5 x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ ?' X+ Y( g4 J% s6 D- K, y) G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); K% g, y, l! _; z5 z$ B

& c$ v$ j% C+ z, O( e是不是需要在DSP.CFG中进行配置" D, c& U8 c5 P  U. [
我现在的配置为4 f2 A# h+ ?+ a# U" p

) P0 Q  c1 Z& V) p; A5 @- }2 @/*
9 ?0 a# e2 f5 T! f' h *  ======== Operating System Configuration ========
; M: K6 t% D( s* i- n4 s$ y; Z! P */
2 U' n+ A$ ~# f. o* g# R% z2 \% K% X7 F" ]
/* no rts heap */
  Q4 J! N; ^# l) |Program.heap = 0;
  I% @5 X4 U4 n+ {Program.argSize = 100;  /* minimum size */
3 e, F; |2 u9 r! ]! [. S; ^! IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 y0 ?# w% @, e- c! o
" C* h" ~0 @3 S8 }9 m0 _/* create a default heap */
3 N' `* a/ Y9 I6 J8 B8 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ m1 J9 F) b: U- Bvar heapMemParams = new HeapMem.Params();! \9 |8 k8 u3 N( H9 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* J) N1 _( m, K$ s5 L% l0 G
) z9 Y: v! \; J
var Memory = xdc.useModule('xdc.runtime.Memory');
' ]: b6 c) ?! w4 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 \9 I+ M* x3 ]/ F3 S
: n. w  v% c) U7 q/ q+ O! t0 l. C; F
/* configure System module */1 [% C# {! ~7 C9 F3 h
var SysMin = xdc.useModule('xdc.runtime.SysMin');. @2 |' h2 U( W1 p5 x& [6 h
SysMin.bufSize = 0x1000;
' h  Q/ Z) d. i9 l* f% wSysMin.flushAtExit = false;
3 E7 u+ x) r9 x# S8 ]# K
8 @1 g, J8 Q. H' I5 W- F2 h7 [1 Rvar System = xdc.useModule('xdc.runtime.System');! z2 e) ~, n6 p/ V
System.SupportProxy = SysMin;
5 }* G" z. E0 r2 g% |' C# G6 x, [8 f3 p% {1 {: i
/* configure SysBios to use the lower half of Timer 1 */
6 L# r( P9 {* L& G9 M5 v8 Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  x" w' I) J* f* A# o' S( pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 R( a2 h6 E6 H3 r1 O& C# RTimer.timerSettings[1].master = true;# A: {( u* Z# Q1 }1 U+ J' f
Timer.defaultHalf = Timer.Half_LOWER;5 C$ t. j5 F+ i8 [& z" Y% m* i. ?
Clock.timerId = 1;: a) e' @! w& a" M6 R" M$ g

! N5 G5 K9 H  P% a1 D9 F. _6 n0 N
2 b0 O6 r: l, ]; q/*
7 z, w6 D: p+ R *  ======== Miscellaneous Configuration ========- d! g9 w7 z% ^/ h7 D7 ~; {
*/) [5 b2 j1 Q$ O0 J2 D' a- j
9 u  a9 c& x/ X
/* set default diags mask */% `  T4 {! F1 p  T7 B  N& Y
var Diags = xdc.useModule('xdc.runtime.Diags');
; q8 _& {5 b8 V3 D% {+ I3 X; uvar Defaults = xdc.useModule('xdc.runtime.Defaults');- J4 s2 z% \; v  N. W" a% ?8 ^
) v: y+ @% b3 V- Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, I1 ^) j' d4 U. u+ J7 r% |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, o2 z. o" y, w1 s  ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 F/ V4 k: e( w& i' A+ iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: X* m! i- S# U
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! O$ b9 Q) R! F/ uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: _6 A  \4 c% ]5 ]& _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, Q$ n+ m+ ?# G+ c. }& E( ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 O" [! Y' Y+ }" s& ^! Q# _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 H6 ?; J" x2 A# u/ d
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 h0 G. f7 o- S  f) g* ^- m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  x6 E0 p' o+ k; U# P5 \4 R2 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 X3 E: P5 |' ?& s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: v1 N1 [* {* a/ C; H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 C1 P! U3 A4 ~' ?+ V- i' _1 [/ j" }- S$ u8 s( c: k9 R
/* override diags mask for selected modules */% _1 O7 U) C( I9 c4 w2 Q) Z; n$ Z# V6 m
xdc.useModule('xdc.runtime.Main');
8 d1 v' h$ `0 H8 A+ {! MDiags.setMaskMeta(
4 i, O5 r( H: h  [7 l: L    "xdc.runtime.Main",
3 Z9 d, y! J0 I8 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 O2 k1 E  Z; j+ d- p+ ?    Diags.RUNTIME_ON) A5 t) P: R0 q. [+ q
);
; m, y( M! A/ Y' r* u5 a8 P0 k3 H) F$ _
var Registry = xdc.useModule('xdc.runtime.Registry');
9 y, x6 M' i* T4 dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- p+ D, v5 w7 _) v& l* bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 M& ~5 J# P- \2 a" K
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 o3 h& a4 z2 L" ^. ~% @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. X4 Z8 |& m! I& W7 |6 N3 i& @2 {" W
/* create a logger instance */8 v5 o6 l7 o# Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ N4 y9 ~( e0 gvar loggerBufP = new LoggerBuf.Params();
$ z5 R/ \4 s" q6 Z, Z: ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ }7 `5 `' G8 n) y: D( }% nloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& I( M# V0 `" i% {4 W* p! F& q
1 r9 P, w/ H5 ovar appLogger = LoggerBuf.create(loggerBufP);5 U* o, Q& D7 N& I& G
appLogger.instance.name = "AppLog_Core1";  N2 S+ A1 K$ S6 r
Defaults.common$.logger = appLogger;% q2 x* z  e0 ^9 M
Memory.defaultHeapSize = 0x8192;   
7 ^/ {6 r4 ~- U4 QIdle.idleFxns[0] = "&LEDStatus";+ _+ s! @& U( V1 q7 m
Cache.initSize.l2Size = Cache.L2Size_32K;
- U! w. Z5 \( j# e& w1 w2 D4 }4 U3 \* K9 I% B
回复 支持 反对

使用道具 举报

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 */! a7 w5 [7 }  q6 M! L6 W0 l, e7 g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 N8 w* A( O/ H, Z5 `- u7 A2 Q/ z6 Fvar heapMemParams = new HeapMem.Params();; q2 ~7 z  S' {5 Z( l6 A$ ]
heapMemParams.size = 0x4000;
5 Q5 ]2 J0 Q! B* \8 `6 g: y3 ?& x) L) R
var Memory = xdc.useModule('xdc.runtime.Memory');6 h  r0 J- N& z" p+ V. H) K. E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 w  }3 ]: L5 k4 P$ Z# p2 Z: I' Z3 `9 }3 G2 J
我大约calloc  每次共计大小为5K*16bits,
% ~0 G% {+ K1 [而默认配置才0x4000、需要改大。/ K- h5 U2 V* r; M7 s

9 t' Y% h* }7 K& m: k  C* l1 V" D5 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# v" q1 K9 _2 D( c; I8 s
Program.heap = 0;
* h7 l5 [, O+ m% ~Program.argSize = 100;  /* minimum size */$ R. v- ~9 {- T0 @; ]) `# Q2 _1 i2 q  t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 17:05 , Processed in 0.042271 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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