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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ W' ^$ w" q/ ]# J; a* P! K& t7 M$ a" }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 h: r0 J: R- a+ ]& l3 [+ P" z
  a. D& G9 y) b" t
其他程序段。。。。。/ w" [7 p; P& u$ q! @
; ]: B  ?8 k. r3 o( _! k
   free(x_d);
. ~; u& q5 M7 {
8 b! M- Y2 \# U, A  |" P使用DSP侧单独调试功能,验证动态申请没有问题,
& w& F# z3 F( l: S( c
2 L5 b. L% J' T! O4 G# ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ L5 z, U; G# U' e4 _+ c
% D- P+ _) g/ r! }

' N0 ]' T" ~9 w4 k. B! b$ e+ Y, [+ O

% r; b5 P+ [, T( Y8 q- I* _9 g* u7 h; [. b

  ?8 |! f; r. C
' x! w' ]) ^: k
# r& p9 w5 ~4 [* I+ [7 u# {1 Y( [) H# r& |
  I- b3 @9 S2 @/ a! a. M5 F) k
/ H& Y0 }- I! ^, k  b
分享到:  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 */
( N0 \' m: }# M& m, f8 Z% C  z) aProgram.heap = 0;
1 Y, d! S6 i' T9 f+ l& i1 K4 J: s2 q  hProgram.argSize = 100;  /* minimum size */* R- X5 r: D( A3 S5 E2 e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 z9 ~( D% g# C; V+ y# p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( x# V( ^$ T+ v$ ivar heapMemParams = new HeapMem.Params();  G4 ]) k, C8 Z9 h" Y
heapMemParams.size = 0x4000;) L, ~4 N4 `+ v3 b  c
" e! G. {' e. i+ R
var Memory = xdc.useModule('xdc.runtime.Memory');
' b3 V) W2 a; H4 B& I% {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" W! Z& [1 L# A& V3 o

1 f& Y, H( e, Y  X5 b' Q. J: g我大约calloc  每次共计大小为5K*16bits,' X, p" t6 D3 b# F# O
而默认配置才0x4000、需要改大。
* r; ^* f' S  L9 H
$ X- D$ T7 B8 l. @
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明* l& \1 E5 L+ L+ ~" E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% o8 O7 h, Y5 [9 i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( P# k0 N5 f* @
. @* ~- T2 F6 `5 @2 W* j0 j
是不是需要在DSP.CFG中进行配置
) n6 y( }: H/ G. w$ k: [我现在的配置为. }4 D$ U. s5 W6 M

( s; u/ V' e( z( u  |/*& |- ?8 L. l9 A6 ?- I
*  ======== Operating System Configuration ========; x$ g. P1 S) ?( o6 _
*/- l$ _! V6 ^& u1 A/ f2 A

! ~, u% r- Z; o* G- \/* no rts heap */. m" \& T) T  Z; _# o: G& B5 m
Program.heap = 0;) ~& k7 q  y( W& i9 r' N
Program.argSize = 100;  /* minimum size */
' o* k/ t+ Z9 q, f$ tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: d3 Z  O( P3 O7 T' }! X  k4 o
3 o1 Y; j8 W# `* j; t  x# g/* create a default heap */0 w# w0 \* b  U' s( _+ l. _2 M' B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ i, n# j. S# W( ~$ o9 _var heapMemParams = new HeapMem.Params();4 {4 N, @% M9 ?- y$ s6 m, h
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& I, X$ G' |3 v

# p# i$ Y! D6 p4 O: G
var Memory = xdc.useModule('xdc.runtime.Memory');% P8 Z$ w7 z0 I$ m8 I/ h) [5 R: s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# W2 s. E: a* Q. A- I4 u# P
! A3 `% Y$ }8 L( L
/* configure System module */
! `. n( }8 {3 Q/ e; K+ }var SysMin = xdc.useModule('xdc.runtime.SysMin');
& T9 a0 ^) Z# _6 m4 E: `4 ~! Y4 USysMin.bufSize = 0x1000;! u1 ]! o. Q( W7 D0 {) j- h
SysMin.flushAtExit = false;" Q! x" r0 O! u: l  @1 U( ^) g& D

6 Y; V5 A& j& H/ Z' j3 Bvar System = xdc.useModule('xdc.runtime.System');2 t! h- J9 G4 g
System.SupportProxy = SysMin;2 ^- M0 C( r8 s3 @$ t. B2 F

) J3 T- G4 i5 |/* configure SysBios to use the lower half of Timer 1 */: U+ o- M* j7 d; I5 z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 W+ B& ]1 \3 r8 x0 Q0 r3 I$ o6 r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, N" Q3 L  R# [% B, }1 Z4 ^
Timer.timerSettings[1].master = true;, P; H. W. L. U3 N
Timer.defaultHalf = Timer.Half_LOWER;
! z! B0 q. ]- q" H2 E) O8 A+ eClock.timerId = 1;7 P: U3 M- U" _/ }

4 C$ R! ~3 i3 ?4 E; m3 K0 p& r) m' C# O4 K, Y
/*! U' O! N& {0 E  G& m  i; H
*  ======== Miscellaneous Configuration ========. J/ }8 M8 }9 B+ Q" e; r
*/
" {: w, n" p8 ?' {! [* i' V: H) l  L+ K. P/ P! v
/* set default diags mask */
. v' i6 U. y' N$ m0 hvar Diags = xdc.useModule('xdc.runtime.Diags');9 R" Y2 b' Z* o) m2 j- ~
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# W7 H# K6 z# R6 V! p
0 u' O, X% ^' H0 L" wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 c& ]4 S( g+ v% N8 ]* y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ _+ D' h1 R) @& Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 a$ T. H) }, n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' R, L. O1 A& ~: d/ ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ e, k1 f$ |+ h+ O4 h, \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& n) C/ Z; a! L. f# b  TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- W3 D( P* r( k  s  B& f- @+ ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 {& m+ C7 q4 k- ~8 k/ G9 B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 b& y+ H8 S+ X% E8 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: e/ O( w4 H+ c6 K5 V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 K& c$ u2 n( c- `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& U2 z: z* y9 c0 @# L' dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 l9 a1 J7 }+ ]" LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 z+ a* P& F$ K2 p3 X
  B( W8 n7 s, {0 u/ C0 z8 a/* override diags mask for selected modules */
1 J9 \3 e6 G" U* Z. D  wxdc.useModule('xdc.runtime.Main');
) C1 v4 K$ @" T- h& k$ D" y. LDiags.setMaskMeta(# \- [' W( @' ~) k0 d7 T
    "xdc.runtime.Main",
1 {4 U8 s9 f: T) y1 p* x; i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 O& ~8 g6 I* }6 V2 V& H1 U0 d) K    Diags.RUNTIME_ON" f. G6 B; K0 b# }( O: Z
);$ k$ S4 a+ z; C  m

; \( P, u" H& ^' Hvar Registry = xdc.useModule('xdc.runtime.Registry');8 Y4 H! ]3 p2 X( x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 A, |: y' c$ {+ [, ~Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 C* M7 W* X! a$ D8 t! ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: T# Y- G7 w. ^7 ~2 `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, X/ A$ Z& R. b9 O+ y* x7 K" b) n% V9 @+ }! f9 @
/* create a logger instance */
7 m' P& w0 D# H  }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  x" ^2 J0 m; I' kvar loggerBufP = new LoggerBuf.Params();
0 `1 x, a2 Z  O' A: c: r% OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& y, N- u; |, P1 {  jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 f* U3 N( Y& G6 ]/ |9 U2 `4 R" d, Z: \, [# l
var appLogger = LoggerBuf.create(loggerBufP);" H1 ?0 E7 h, @0 B& w8 K  ?! K; C- ~
appLogger.instance.name = "AppLog_Core1";
; ~$ o. D' f# [6 j7 gDefaults.common$.logger = appLogger;% u' l! U' Z+ S9 f2 i+ K
Memory.defaultHeapSize = 0x8192;    , u: w' t# y6 ?- r* L6 _
Idle.idleFxns[0] = "&LEDStatus";7 H3 p# n" @0 m3 `8 Q$ a
Cache.initSize.l2Size = Cache.L2Size_32K;% g$ A. \' L6 I

: j" A2 A" Z) s7 z2 u
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 04:37 , Processed in 0.041299 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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