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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" J2 i. H) ~# s' f! i+ m. d2 S% |+ M) y% v3 v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 N0 \# z) {3 T4 S5 D

( t0 Y. [* A* ^) q2 C* m  i2 y其他程序段。。。。。
  P$ H0 K; H8 U$ \: ] ) x4 H: E# o) N8 u, ]" o3 X5 j% ~3 [& B
   free(x_d);( b3 G( ~9 {5 j: e5 f# e& d2 h

% S- V% _- z* s0 [5 \# {使用DSP侧单独调试功能,验证动态申请没有问题,/ x, `& U  W1 H

! ]* S+ e, F7 x% q& E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! [" P' _/ k0 s3 `; ]

0 m( g* A) P1 ]/ A  |
; ~* g; x/ I; c/ x( f( Q/ W% \  E+ s+ ~& }/ {

1 f& J' \. g. M. y$ W( J: [" N; V( g3 p# |$ m) }% q
; C) ~( x) ^4 F, E/ c& ^

* L8 }! S) W; k" g. S# p4 F. |% k& ]2 k

* A* v* E" H" U) ~2 q8 }6 A' Z2 V+ U& D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 u4 s, Q' |. l8 F& z' I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ H: Z+ v' Q( e5 t3 X* L! H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 u6 `: }  ^/ s$ l  Y, s1 U

2 x4 s- \% S6 w# p" V: T3 W" R是不是需要在DSP.CFG中进行配置$ }* a( z$ X# z/ G, }
我现在的配置为
: Q7 F7 x1 l2 P: o. K* L
, L6 A3 }  C4 _. O/*; [& r4 s# Y- G3 z- q
*  ======== Operating System Configuration ========
- w. S! N9 g8 I/ M$ Y *// e! \# d9 s7 I: J% o' K

: Q. {3 z  b2 _) A) d5 C/* no rts heap */
1 |4 m+ e/ A- ^- p0 S4 Q) P2 j, xProgram.heap = 0;
. d# E% t3 l; V2 l! H) zProgram.argSize = 100;  /* minimum size */
: G4 C( N5 ]0 ]! N2 i! JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ b- b: u# @' m" y2 t- r3 k' M, J! H
2 p3 p" j; V) W4 X* a
/* create a default heap */
9 }5 a* G! `$ S: Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" M6 ?/ F/ e6 r
var heapMemParams = new HeapMem.Params();
  t$ g$ Y* e8 j" j1 yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* }$ D+ I7 I- U5 ]; L% V. d* f3 P. M
var Memory = xdc.useModule('xdc.runtime.Memory');1 @- e7 G5 f7 T8 N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& w6 L- @5 j' M1 S+ i
5 E" S* }- C" ~; F; M$ \/* configure System module */
# R# W. x& ~4 @4 {+ s" c- Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');* }- H! f9 j( \2 a6 I
SysMin.bufSize = 0x1000;3 |9 o4 q# u* [; {+ i$ C
SysMin.flushAtExit = false;+ s1 r( N# Y. a+ |$ i+ A2 N* W
3 P- y4 z* k# j
var System = xdc.useModule('xdc.runtime.System');
# T0 Z; F" [/ PSystem.SupportProxy = SysMin;7 R7 d( L2 D0 _- |
. w+ ^, H7 u5 M$ T% K+ m
/* configure SysBios to use the lower half of Timer 1 */, `! f9 c7 t' C( L/ k8 r% J+ \- E+ }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# S# ?1 s" g# |1 t, D/ c/ }* Pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ b3 n9 U0 z2 y. `* }# d6 \Timer.timerSettings[1].master = true;7 m: S; B5 n: l& |! K  J* ]
Timer.defaultHalf = Timer.Half_LOWER;/ u# q; p9 G3 {8 i% R
Clock.timerId = 1;* b+ b& g9 n- ^+ R

& `0 b4 t! u7 K2 f6 @8 X3 a# G; a4 ~* F4 x7 T$ l2 V
/*" M8 V, b5 {) @
*  ======== Miscellaneous Configuration ========
% j* {" w% v, L2 x */
; `# g4 o1 X- I& c/ C0 A
+ ^! }: }6 a2 i  l$ G  h/* set default diags mask */' \1 P: N7 G" e& k% n
var Diags = xdc.useModule('xdc.runtime.Diags');# a/ l' X# p) A( t2 M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" V" }5 d2 g* C( F% g/ C* z$ _& c, }5 I" `  G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" k3 ?/ \; i) e' `- MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; S) o, V4 I. `2 X% u3 rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 G) `( |8 m+ z1 f  Z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 N0 o" u, S! z* Z9 k9 S
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 o/ R: c0 D/ f* |, y9 ~3 [; \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 u+ ?7 c/ ^7 I9 U9 o
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 \- K4 P. J1 j, v# Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( E/ z& \( Y: H" u" `# _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! J0 J- Y( s3 p5 k" WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) u4 ^' s' r$ a" m9 bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  p" M, z, U/ c3 v7 K3 a. d; g$ r) qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- a: }0 U, ?+ |' H" z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 X" d% Z: I3 DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 N1 K; X; J* d- }: q
" X5 e8 t* A. v* P6 \+ G* D! j2 Q) V
/* override diags mask for selected modules */; v; V% d0 @& i
xdc.useModule('xdc.runtime.Main');7 i+ e% I1 N' M  a+ J
Diags.setMaskMeta(
8 v7 y' o3 W5 w$ p+ d8 n    "xdc.runtime.Main",
9 a" W. m8 P* O/ ?3 \; f! G  j& X    Diags.ENTRY | Diags.EXIT | Diags.INFO,% c8 s+ i# k' e+ W
    Diags.RUNTIME_ON7 ?7 \  ?! d; h& s+ g8 L$ V+ [
);
% m- T2 a0 n# m, \& ]4 G4 f. R3 X2 l6 ~2 Z4 E1 F: M
var Registry = xdc.useModule('xdc.runtime.Registry');& N- t) l+ h& T- x! q0 f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" z& k# {# T/ T0 l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ L! u  Q" {  oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 i9 l. O  i( M) a$ Q0 h6 z' FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% H2 t. R0 h3 D' o! N
5 j  M$ u8 }! Z" f3 d
/* create a logger instance */* z; ]3 d6 O" x+ i: u1 p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 l$ J7 m! Q: s' C. bvar loggerBufP = new LoggerBuf.Params();1 W& B! M) |$ R6 J; L: F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 j5 ?5 o7 \1 z8 Y* FloggerBufP.bufType = LoggerBuf.BufType_FIXED;% w! {# l2 e% H1 q& j: {5 R

8 ~! t% m0 h9 [  T& V) ?var appLogger = LoggerBuf.create(loggerBufP);
" l/ ^9 a/ n! w8 J& m& {& F2 MappLogger.instance.name = "AppLog_Core1";
) t( r: f( l5 T$ d# r% SDefaults.common$.logger = appLogger;: H4 @1 Z' s. f
Memory.defaultHeapSize = 0x8192;   
- I/ U' k/ Q! U# R4 z/ B& S/ }2 D4 HIdle.idleFxns[0] = "&LEDStatus";  Q& s- S0 k4 ]" E0 T# Y  p$ q
Cache.initSize.l2Size = Cache.L2Size_32K;2 \7 u" |1 I+ Q8 E. e' `
- Q5 S! j  k9 g+ W# u  H
回复 支持 反对

使用道具 举报

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 */) u1 w7 J0 o% O: B0 @0 Y/ P- T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; I) ?" @4 P% K) n1 b8 j
var heapMemParams = new HeapMem.Params();
$ J* Y3 y- Q9 SheapMemParams.size = 0x4000;
$ Q$ P, f, P" H$ \, w6 R
, o9 Y. P' g, A9 |0 jvar Memory = xdc.useModule('xdc.runtime.Memory');: [1 b" B2 v( l5 a7 J2 h3 f; D3 x* ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 M  Y" G6 v' o( b; T5 Y7 H" {  D9 L: F' n/ D, z8 M
我大约calloc  每次共计大小为5K*16bits,
( i  ]9 A( j/ n8 E; ]7 @  z, q8 u2 D( [而默认配置才0x4000、需要改大。4 w, @5 R  @3 t
( Q4 K0 w9 G6 s3 j3 M, P5 _6 C$ L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 |3 ]6 Q+ A5 T: q1 M; ?
Program.heap = 0;- o$ C# I1 m( j
Program.argSize = 100;  /* minimum size */# Q- ~- W& g" s! l' ]/ ~
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-1 13:19 , Processed in 0.046757 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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