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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ Z! r/ Y6 U1 G( m
3 m" y" \  s" F( h( y" ~& z4 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ Z% J- P" W8 H% T& `8 ?) a, g$ a

2 Z% Q3 _5 t3 J" m3 B4 _* T其他程序段。。。。。  B9 v1 k! r+ M% ]
& \& o: H, s- A' Q4 o% a" ^9 Q
   free(x_d);1 e: b" L5 H; O% w

" `; f8 E. U: Q5 }使用DSP侧单独调试功能,验证动态申请没有问题,$ ?* V+ V6 ]; u

8 O8 p4 C! ~) ]- i! T; d  z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; ~% c7 r7 S! z8 C# k/ d. V
7 T8 p1 Q& Z" `3 [; M1 X6 Q

1 n0 q+ Z1 @9 T* [: {/ g' N
( D( A) {* K- y: f! v% _  d2 ]+ s9 |0 \( c* `; P* ^$ _$ j

4 I5 r7 L4 ^; y% e# C
# {8 v9 x8 Z& U. b* `" e) \# l* s- }' p1 Z' o2 S' ]( b: W$ {- U

; M4 |/ H: q* {* u
0 P. k/ n5 H5 H1 r1 M$ @: w) Q- K0 [! g' r7 M6 U. E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. M! e4 Z& u$ F% W  m2 |" O( ^+ z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  w" n7 T3 k+ J5 X. M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( ~; h( Q' b( s1 c5 _
7 @$ Y9 Y4 z9 W* \. T
是不是需要在DSP.CFG中进行配置+ I- H4 l4 x* e# K; J! b# z. X9 w! T
我现在的配置为
; x! s+ X" f$ S. p7 l
& l. u5 r0 r6 W9 F; t" ?# h/*+ ?0 I8 z- d9 R* V' j  A
*  ======== Operating System Configuration ========
) @) J( W1 A! _: w% Y6 e) v3 N7 O */2 Q" O4 P* ?( z

# o: d; y8 @( |/* no rts heap */
% ^1 G( B6 ^. W/ aProgram.heap = 0;
9 P- p5 K6 s& o9 SProgram.argSize = 100;  /* minimum size */
. j! I, o0 H1 {& qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ Z' W$ y9 [2 ?0 p7 Q+ O1 }# Y

  _- Y( A$ m/ J/* create a default heap */- V" B9 O8 Q& O! S* d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" {( u5 i  @4 Y% j$ f% _4 Y# Zvar heapMemParams = new HeapMem.Params();
1 h7 J: W6 j( U0 i  eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# @8 g7 j2 C% i1 w8 S7 M. ~/ V& a9 J

; k$ m! x2 j9 L! B9 J: n
var Memory = xdc.useModule('xdc.runtime.Memory');" b- C2 t( d6 A- z) ~8 u2 D' o: x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 {! X" t8 Q' [
# L# S; A& ?, _& a* _7 c
/* configure System module */
; I+ m( H& P- {4 J3 uvar SysMin = xdc.useModule('xdc.runtime.SysMin');3 k' l9 p3 |6 j2 R; ~) T: r% D
SysMin.bufSize = 0x1000;
4 ?* w/ T2 b; `9 q5 }SysMin.flushAtExit = false;% ?$ J8 M9 Q3 u! W! S7 K% q

& R/ ~3 k7 v5 F9 h* Pvar System = xdc.useModule('xdc.runtime.System');% B) h$ o8 k0 ]$ [) [3 B, @2 N
System.SupportProxy = SysMin;
6 E7 R( M1 ~. Y* H5 q) f9 \8 N# }
: r4 Z, b- a6 e4 d* T, `2 l/* configure SysBios to use the lower half of Timer 1 */1 J) r9 y$ k# L& I+ F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, [* K- c, r4 H4 evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ V0 w) d/ h! G* l) kTimer.timerSettings[1].master = true;
1 d" f: S0 p: q5 o$ k1 @Timer.defaultHalf = Timer.Half_LOWER;4 y% z7 o2 Q) U) i# n  p
Clock.timerId = 1;
7 U  E2 I' a( H! ~- f. q
6 L" R; U: p' I2 t$ U, E% u/ S
) I/ C1 t- M5 a& b8 c+ {0 T# P' ~/*
# n) O% r: z  ~3 f/ A( j. C *  ======== Miscellaneous Configuration ========) W) l& `% \4 ]% h, f0 n: u* [
*/- v$ S- Q. R6 b! y/ k! r# j" J  l
8 R( U6 o9 |+ f  Z/ N. M" D& M
/* set default diags mask */
. S( ^3 y  p# Z9 D' |var Diags = xdc.useModule('xdc.runtime.Diags');
) T8 Q8 l& r9 H- f- tvar Defaults = xdc.useModule('xdc.runtime.Defaults');7 E% s& m/ c# @" G6 w$ W8 h! Y
7 l3 E7 ]# x# o, J  k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 a, e6 `, s' K# X) C% _6 CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; \# G3 ^1 C! G0 U/ ]& u3 P: ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 k- p8 j9 q5 w% b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 s. t7 I4 R5 a7 A, c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( u* |0 [3 n# U6 jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& `' b5 j* t- c% o! v8 j6 ]4 ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  N$ X4 |. f7 \1 {* f/ x% nDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 i2 m% p7 d6 J7 pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! o0 U: N2 o2 k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) A2 {* Q4 l6 ?: E) E
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# j/ G5 C6 ^! s; Q. ?/ N2 cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* t" P, \, t5 @4 k  Q+ dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: D% e0 G  l8 p8 g- f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 u8 K$ o- B9 ~+ Y5 F" D  v, M, j: d$ x* Z' c& N- n( o
/* override diags mask for selected modules */
" S7 L. F  W" h) a; J) Qxdc.useModule('xdc.runtime.Main');' v; c0 O+ C' {' H* @0 F2 J/ V
Diags.setMaskMeta(5 ~  |" W# F5 g. D0 Q" H
    "xdc.runtime.Main",
9 g" Z# _; g# h: H' |& d! O0 q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; T$ K1 ]6 }( i( \6 C- J" S    Diags.RUNTIME_ON6 p! J# b1 L3 x+ }8 z
);
( e, y' y1 s! Q% N# Q1 o% ]' c0 [/ o, H& J6 B
var Registry = xdc.useModule('xdc.runtime.Registry');' h  y& \3 a' w% ~! b) t; m  r& J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; C4 o+ ]! ]; _2 }$ M
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* h3 M  ?+ ~9 q7 d6 ~, J4 [% z, F! h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- Y. b  O4 K% f0 q8 Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 T9 F! w! M6 `) I, \/ z( T# \+ s8 h9 n) c5 U! t+ w
/* create a logger instance */
, W" i- n1 t" L" yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ @" N9 n: o' \& |; O4 Evar loggerBufP = new LoggerBuf.Params();
( ^- O9 _6 q( e+ yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* Z0 M  [! O% c* z. Y1 n8 a' ?% F* mloggerBufP.bufType = LoggerBuf.BufType_FIXED;" \2 X/ O. c  q/ H

7 V* ?/ D" [1 Hvar appLogger = LoggerBuf.create(loggerBufP);
2 ~- {. N( X7 P8 a( e8 p& kappLogger.instance.name = "AppLog_Core1";
( O% d' D6 d* xDefaults.common$.logger = appLogger;9 l& w) f0 b  |9 o2 U& h8 F5 w) `/ a% I
Memory.defaultHeapSize = 0x8192;    8 Y3 z( d: I( z* k
Idle.idleFxns[0] = "&LEDStatus";4 ^$ I6 b) m! @/ ^
Cache.initSize.l2Size = Cache.L2Size_32K;" o: L' J% V& T; W) o! j8 F+ w3 p
- l' c! E! o6 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 */$ |, e- {8 a1 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 H! p  A# w$ H+ y; Y! `' Vvar heapMemParams = new HeapMem.Params();+ S! X' W: z4 f# k, F* H5 h2 ^
heapMemParams.size = 0x4000;
4 x) G! R5 |4 s$ J) `7 u1 x1 c3 B9 ]# O; _3 E
var Memory = xdc.useModule('xdc.runtime.Memory');
9 p& }) H6 M* H' N, J( R0 |7 h" dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 C3 N$ c7 _5 w9 K9 B4 Y4 @' a6 R

1 G* S; [! g* y, P( T& z  H3 h我大约calloc  每次共计大小为5K*16bits,
/ G$ B6 |# ]6 q* F而默认配置才0x4000、需要改大。
# L- q9 c4 h' f" a4 L( d6 J! h, G, S$ X# t0 N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' K- p0 c) z/ aProgram.heap = 0;
. q- z( t9 q/ KProgram.argSize = 100;  /* minimum size */0 l2 z. w1 C3 k
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-9 05:17 , Processed in 0.046396 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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