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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' x" I; [8 f( f- L4 c' e4 F  u' Z8 [8 k  C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. d- P5 o/ x; X5 W# Z/ a2 w/ z2 j3 u+ J# N& Q
其他程序段。。。。。
. `$ d' ]' o! R; l" R, O) |
7 B- X- b' M8 }   free(x_d);
% b3 Q4 a& v* t. K% }7 V6 ?1 P8 Q/ U  k; Z& U/ N2 d' {9 y9 z: ^. r
使用DSP侧单独调试功能,验证动态申请没有问题,
0 M7 {' A! c/ U- [" a9 v
) O; J5 l3 Y7 T: P& K% L9 V$ F* d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# C2 x% {' b# ~' J; C
; w+ a& P* }2 Q; u, V5 y
  `$ f5 n1 b$ U$ k4 U# `# l
+ F# l  n# j  |+ H4 B

3 m9 T* b1 ~3 x) ?4 y3 w& R" V+ U: z

( j9 X0 }2 z* q% K* d  B- W/ X. a: [
1 q( h# r2 L) U2 [* ~- v; {- a0 X5 p1 ]" @( r) p

6 k' h  s8 d  {' s7 J  C7 L  i- W9 i1 P3 {9 a/ L
分享到:  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 */1 s# ^7 ?6 e' p: @
Program.heap = 0;
1 g! v0 V$ J# m4 z9 z7 |& DProgram.argSize = 100;  /* minimum size */- z5 ^2 |6 n, q4 m# R$ J; I
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
; w9 w& I" m% a. A3 O8 x( W) V) F# ^1 N( @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. S/ ^$ e& \: z1 ?4 }9 P; D( ovar heapMemParams = new HeapMem.Params();
/ c3 i! F5 o6 ]! E9 KheapMemParams.size = 0x4000;$ ?8 m2 @0 p6 d, g4 }" h

9 b8 {7 X! f0 i# `var Memory = xdc.useModule('xdc.runtime.Memory');
' O3 u4 H( @8 o) WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: _/ y2 H3 N- g. r0 O$ ~

! U0 Q: {3 @; [# }我大约calloc  每次共计大小为5K*16bits,  @: {* X+ ~. h
而默认配置才0x4000、需要改大。
1 s$ z9 ~) A4 b- y" L
/ |% q2 X5 {' p5 l* O: ~+ F; c0 \! 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 | 只看该作者
补充说明3 T" p. M( ?6 |' `6 }0 t1 @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- {, D' J# P0 u5 t% E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. K+ S' C$ ]3 _9 v
6 B) [# ^( y$ k" z1 s' l  F
是不是需要在DSP.CFG中进行配置
3 q# B/ K) \  t# T7 U我现在的配置为
7 P: L7 c* b7 k" K# w9 d+ _/ M% j& }* h! o
/*( M" D" K- a: y9 o$ d3 k( V
*  ======== Operating System Configuration ========; z7 N$ w" b* a2 ~
*/
, Y9 i8 I- n) S1 ^) k3 i
9 z* ], Y% J6 o* `. G1 q. t0 M/* no rts heap */
# w+ p( x% ^% W% IProgram.heap = 0;
$ Q: K& u  `, z# H; ]# Z; oProgram.argSize = 100;  /* minimum size */
* I3 M7 _: N+ Y% G' M; v& K8 {9 TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, b- r% |% U4 `1 o
4 d( |2 ]1 b: n+ |2 E5 l/* create a default heap */
8 O' O; O5 V' H  C% z2 Z+ ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* h% F& ^3 B9 }9 a  O6 Bvar heapMemParams = new HeapMem.Params();
9 J7 N, [& r" J  Z; ~+ }, g) [/ rheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( @, q' h+ M( X8 F6 m  S. O& K: F3 C' N" q
var Memory = xdc.useModule('xdc.runtime.Memory');
' K4 i5 j" s1 TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- z: F6 [: s! W4 ?+ [) O# D' |/ I
* p+ B0 V* j+ q$ a* C5 G2 n/* configure System module */
* Y$ u$ j) P1 p; N4 ?& T9 T, avar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 H5 \9 \. |# p4 m! [SysMin.bufSize = 0x1000;
  u3 [( h+ B$ {& u- D9 XSysMin.flushAtExit = false;
: T1 b& z/ j0 C* ]- U+ r' Q
1 e' A# Y) e! a+ T' Nvar System = xdc.useModule('xdc.runtime.System');! X& s0 S& G) o0 E- U
System.SupportProxy = SysMin;, V/ @' Y  H& T; q2 p0 X
7 R/ f& l, T& a
/* configure SysBios to use the lower half of Timer 1 */, D1 w# u8 W' l6 A
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  E2 w) x) G9 g; O5 lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! b+ n8 v* P1 D8 NTimer.timerSettings[1].master = true;6 r5 ?$ V1 w% F" |4 h2 U( H
Timer.defaultHalf = Timer.Half_LOWER;& s! l# P% ~0 G2 P1 N
Clock.timerId = 1;% m/ F9 o" Y) t$ _

6 ^3 M6 m) f. u: D6 a; h/ H& {! T( Y
/*0 B' r! @/ h/ X+ s* o, s
*  ======== Miscellaneous Configuration ========
8 m/ O: A& ~5 C, H; B) R3 @8 @0 J */
4 p. }& i0 q: {8 V1 s" a8 F/ Y- F) _% U$ d2 T- ^+ S
/* set default diags mask */( ^: X: c  `3 o4 S: D+ |
var Diags = xdc.useModule('xdc.runtime.Diags');
7 G( p" c, R- i0 V+ d( Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');  C0 O! V( `( w  w; o
# }7 p, k3 e9 P9 d8 Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% J7 K  f  V; a& I2 c3 Z$ vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 [0 V; Q2 C3 [& f" k/ dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) E2 o$ J8 V' f% s5 U1 w" hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  q# q8 p# e; u* p2 P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. H6 R- `- w* S) [8 ^$ V& O8 oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  g$ _  W. [, Y5 g* T5 u0 B. M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( D0 e; x6 l' |1 z- r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 s6 S2 c% w, A5 i; i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# w8 X, Y0 o% A( f4 G) G+ R+ S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" a  _$ H* @. L6 [& j4 N6 FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' H: D7 N0 q% g. PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! O3 X, d2 X$ W1 m# n3 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  }# Z0 }# k8 |1 ]6 [6 YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 r( w! ?- K& A6 E$ B. b0 k+ q* H3 G4 x$ Z# y1 T" O
/* override diags mask for selected modules */; u- U. \9 K2 e! k0 h' s
xdc.useModule('xdc.runtime.Main');
: j) p, W0 V9 r9 ~2 ~9 b! VDiags.setMaskMeta($ e# p. `8 p; d3 U. g8 x* T
    "xdc.runtime.Main",
: X) ]7 N; Q$ I- Z/ U7 S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ c! o$ [# n  [2 z9 x( E) o    Diags.RUNTIME_ON
, T! ]' W2 l  f; H6 X4 X6 e3 Q);: _5 f# w6 |7 m9 l( T

8 m+ _, _% Z* ]3 i. c  u/ q+ |var Registry = xdc.useModule('xdc.runtime.Registry');
2 l7 t! W9 D- lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 H6 O3 A" r* X$ y% u- {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" X* m- o# f% M0 D1 DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, F; i/ H, @( ?% e7 `3 eRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ a' w: C% h1 F8 h: X+ L% L* \# |
. ~; h0 `9 u( [& n5 v% t' O: V
/* create a logger instance */
& o/ ?/ Z' C7 X" @3 j7 v+ x7 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ s: Z9 w: Y% U9 R4 ^var loggerBufP = new LoggerBuf.Params();
  h" P/ G) s7 _6 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 n# k. u5 G% x, W, B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ E  U" f% p  X/ o/ J- W
0 b/ F' v' [, _" \8 g0 D4 Dvar appLogger = LoggerBuf.create(loggerBufP);1 P7 T. ~! y, i, u) M. D4 R
appLogger.instance.name = "AppLog_Core1";
  N4 \- `/ f+ f. N* V2 {. A3 p1 oDefaults.common$.logger = appLogger;
/ N$ j0 C; Z2 `$ C4 dMemory.defaultHeapSize = 0x8192;   
: z$ v; f' ^* z$ S* W( S5 A* k1 XIdle.idleFxns[0] = "&LEDStatus";( R/ s5 R) {  ~; m, l8 v) i
Cache.initSize.l2Size = Cache.L2Size_32K;- E# k5 z' S9 _% H) \) F, `6 \

& x4 w5 d( o) w  n9 d  N
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 05:00 , Processed in 0.041989 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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