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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 c% e8 `) h2 g/ S
" h$ v1 j5 h- W; E' ^- P4 K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" K: V6 c! H( J" q4 {6 Q+ y
" P' x! z1 g, X" K8 E9 X
其他程序段。。。。。# B% x, ]. S5 w+ h; W! Y1 t

2 u! ^# H' f- E6 M' z6 U   free(x_d);8 ~: N  |! u) a: b
4 _/ H: S% A" M1 L1 X+ l
使用DSP侧单独调试功能,验证动态申请没有问题,+ c0 a* L  @0 A0 y6 [! @
8 H5 r8 ?% O* }) g, k' W( P0 d4 l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 }; _; _% L: z- Q. Z1 k

( B, k& b. m. t7 H- m
3 @7 f+ u# n, k& f/ S% b2 ^5 y& Y" P0 @! m
" o( B$ L- @6 \0 l% ]  o! h

1 \5 C$ s" V7 h; r4 X" [
+ B9 s: H- \3 s" I4 B3 ]  Z9 e! w3 n" q! Q
& E" H9 r$ i& H% s
* g' l/ a7 j: c2 X8 T! `+ `
7 E0 e/ H) F" [) }; J3 z" W# J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# U5 T9 C$ w3 H. w* o1 K# T+ C
Program.heap = 0;6 t7 ]+ G- M& Y. b2 W, M
Program.argSize = 100;  /* minimum size */
0 V  Y) b( \% D' O- yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
/ V+ v4 h5 r/ _# y6 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 h6 C7 n. {4 M" s' o7 lvar heapMemParams = new HeapMem.Params();
! O$ i2 z0 w  M& `0 k1 v8 ^heapMemParams.size = 0x4000;8 l7 Y# J* C/ ^) O
$ I! K5 L4 w$ M" Z! j
var Memory = xdc.useModule('xdc.runtime.Memory');
9 R3 |- C' y5 k' Z" A: [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. b. `3 `  l1 L8 j" y
) }4 Y5 K' U6 `( j5 C" T我大约calloc  每次共计大小为5K*16bits,
' z& {: y0 b0 |$ ~1 H而默认配置才0x4000、需要改大。+ _$ S2 u/ o( N  ]: ~7 \
& l. u: C9 e2 n0 B$ s" w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& S& J$ `% v' i2 s. @! H* ]# H, W8 b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ `' h! i2 ]; D, `! A  S) s, S, _
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% z2 {( G4 p0 e) y! M; |
# A1 \' t; J7 o0 t6 g7 V
是不是需要在DSP.CFG中进行配置
, k0 \( @$ Z. r. q: a我现在的配置为$ A9 m' r! }2 ]" ^; _, ^

; a) X/ [, R  E# I4 x/*
* A) C0 a3 V7 x *  ======== Operating System Configuration ========
$ S5 y2 y, [( T. D' r) j1 ~ */
- N& k' ]! n' z9 p4 I; ?' Q, l, D' d' [, i5 d$ J! G% f
/* no rts heap */, c1 r- _9 [) i& f
Program.heap = 0;
" V7 e/ o5 @+ N9 r  B9 C5 vProgram.argSize = 100;  /* minimum size */9 g' k, T0 S/ A+ G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 z) P" E7 B1 L$ d5 @# C% j7 ?# G- \3 ^8 y* x+ D" D* ]: g9 f6 N' U
/* create a default heap */. d4 E8 K/ g4 |3 Y* l- H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# h- C& j- j! F( ovar heapMemParams = new HeapMem.Params();
: [* O' A) d) V* j9 k/ {) b! s2 @6 K3 aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 F: O2 a9 |( f5 t+ e" C- c; Q! |

/ S4 h% v9 S8 o/ y1 ]0 B
var Memory = xdc.useModule('xdc.runtime.Memory');
" p6 w0 U% q7 ~! a; K1 L4 PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ N3 L6 F: X: q3 x
9 H/ [9 t8 o8 h, E6 D
/* configure System module */
+ O5 S% d: K5 G1 ]& V. ]var SysMin = xdc.useModule('xdc.runtime.SysMin');/ ~$ b+ o; J  N
SysMin.bufSize = 0x1000;3 ]. L  q# O. ?0 U+ H+ C
SysMin.flushAtExit = false;
9 S) R, S' a* ~0 j. g0 B% N) H* ?4 G: `
var System = xdc.useModule('xdc.runtime.System');7 ]8 V6 s, N, u, Q& c
System.SupportProxy = SysMin;: |( Z3 M5 m) U% h6 b  h0 D
& g" B" w) c0 D7 h% @
/* configure SysBios to use the lower half of Timer 1 */9 P% L( N" x5 R% o% J% j9 _9 {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# y3 I# {' q* _var Clock = xdc.useModule('ti.sysbios.knl.Clock');
( r; d5 K! B/ y! ~! TTimer.timerSettings[1].master = true;
, {" Z! f3 C3 q5 O, a3 ~; R4 t$ \) gTimer.defaultHalf = Timer.Half_LOWER;
4 w0 j5 U" Y+ E, b0 M4 U0 U- w1 @Clock.timerId = 1;, x1 A+ p4 n3 @# H  d6 E. A3 r' P  x
% A4 _: W  H4 Q- }
6 k4 y5 @9 N# _$ F: n. z
/*
- I* ^9 [' B4 [- T! m* ^2 A *  ======== Miscellaneous Configuration ========3 {1 R7 r" Z1 n5 W' D- t" U
*/
& x' t# `  c$ a, T& `, i6 b: v+ M: t) `3 N
/* set default diags mask */
; i9 C" [: _# Bvar Diags = xdc.useModule('xdc.runtime.Diags');- d- {( m, ^0 @( @- ?4 L
var Defaults = xdc.useModule('xdc.runtime.Defaults');' K) b. W& a. v: n+ D
3 f1 ^1 S7 @2 Q! @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 T- f; g" p1 p  s( M0 U0 i; ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) t8 i3 t: Q. g& qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ x1 L8 q, h+ g  {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 X9 l( n6 c3 r& ~9 Z$ SDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& ?( k6 h+ m9 @( S2 T/ GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" _: J$ {! z. Y9 O3 T# B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 W$ R( A3 T" Q0 x% Q7 Q+ M
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- u, A1 I4 o  P7 V4 G$ J3 D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% o7 F/ C. t, U3 |* `! EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 o4 ]1 M+ k! G" D4 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' D( L, f- g' C9 D# b6 aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 x- O+ J, v. |Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" {# ^) h' J& G1 ]( l/ @$ \$ F; w2 Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 L3 l$ B6 }, i" f. [
, C& S2 h3 u5 p: t, D$ J
/* override diags mask for selected modules */' _% B; G+ b6 a& T2 n' Q
xdc.useModule('xdc.runtime.Main');
+ i' ^" l% o* U2 @  \Diags.setMaskMeta(
+ C; \8 o8 I$ X8 h% P    "xdc.runtime.Main",
9 F. L, g7 E: I; b* ~  B" \3 S- q    Diags.ENTRY | Diags.EXIT | Diags.INFO,* D# |0 V! O8 n' e9 M, d  `
    Diags.RUNTIME_ON- n* {3 I4 [4 |( X8 a
);
! U# d; Q" Q* M  f6 K: O4 s$ t& Y8 a$ R" {2 J4 I
var Registry = xdc.useModule('xdc.runtime.Registry');
; ~0 ~8 I/ v2 F, p9 q% P4 e( tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 J# M& P) T% S: A1 H# ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; u/ \  P, q# T) rRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" z1 q* I2 m- H8 l9 Q! Y1 e( sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 a/ Y" u1 W# R$ V$ ?! U( z( f
% B+ W* G! f# j5 P9 \
/* create a logger instance */. a3 d. Q0 p' ?0 K7 k, b7 o5 W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# M6 y$ T+ f- B6 t7 X5 e+ _" T9 {6 r9 Tvar loggerBufP = new LoggerBuf.Params();7 b# [! Y, O% q- t
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 u% e, h4 V' y: ~% ]. f0 Q/ I- {  Q- `1 x
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# I3 ^) s5 v" T; y7 m& s( }
( o, ?' M  K! G6 ~! h+ L4 Q7 L' gvar appLogger = LoggerBuf.create(loggerBufP);
/ D8 y6 ^% s# h% r3 k+ ~3 cappLogger.instance.name = "AppLog_Core1";
4 v8 p9 V* Z+ @1 g5 RDefaults.common$.logger = appLogger;4 V+ }. R: Q# u' R& Z+ }( b
Memory.defaultHeapSize = 0x8192;    0 j7 c0 t3 U% [* }& a9 h4 H
Idle.idleFxns[0] = "&LEDStatus";
  c9 `  Y3 @  X/ ~3 k. V! Z6 o: kCache.initSize.l2Size = Cache.L2Size_32K;
# b5 c! g; ~1 p. f; d$ e9 G! y% @. [" T0 d1 g# H3 [6 t
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 11:54 , Processed in 0.046599 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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