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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 d9 w" S* i4 s! N8 `0 s
) t0 T9 d) W9 c. ]* V% I* o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 \( I2 e& c: c5 @) r3 `3 w

( ^3 h, z# X# W2 |7 Q其他程序段。。。。。
+ E9 B% L+ _; U3 D! ]( V+ r( T& f ; |: Z& J! B  n" P  a
   free(x_d);
6 k( k2 Y" D2 ~! E8 e! K% R0 M2 g" ]* k& @
使用DSP侧单独调试功能,验证动态申请没有问题,
4 p9 y; y0 z& v& o# y
' B3 a! d8 j# W5 C- B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) `. {# ^6 ]' x7 {
7 x4 S6 y; W; I- }. V

! P: M( j; i% a
* ]9 y3 Y9 v' h; ?! j$ ?
: k& b# l2 e2 @
) L2 A, c0 U" N: Q/ w6 r5 O. u" c/ E/ f' k
% J8 s8 H' k2 m+ w5 W8 L

2 p' z" A7 ]# ^4 a- M) L
/ [" H; h& C2 c1 w5 E; j" C
6 S! H+ u" x2 @1 B1 A  k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 S& f1 L" @4 y1 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 i; {$ z5 x! g$ A  a$ C& S1 z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. A9 ?# B0 b5 c$ R  ^

, `- @7 k8 k6 M8 T+ z* n8 V是不是需要在DSP.CFG中进行配置
  n' x+ @0 Q. w9 k我现在的配置为6 @1 N/ i  @. q- @

" |0 H! p+ X- z% U: k! n3 l/*0 I/ @# n: K) _) P5 r# L9 e1 w
*  ======== Operating System Configuration ========
( ?$ k; j: z9 U0 l */5 D% v' f% Q: v; U

( S) g9 G1 D1 j/* no rts heap */
$ ]) d- V  c: |$ k) `Program.heap = 0;3 M5 U# A" I6 H+ i0 I- E
Program.argSize = 100;  /* minimum size */
  M6 u) o# |2 E* B- `1 e- |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 p5 p7 a+ h/ X$ z& S6 q
5 l  H4 \7 Z8 v3 o4 Z0 y# I/* create a default heap */
/ e: t: _6 X+ R$ Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& X# O, |( z4 l, k
var heapMemParams = new HeapMem.Params();# }. @# t: c" i/ y* q5 S, T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 v3 a+ m% w, g# ?0 B1 K! H) f

7 H" h5 }: H7 U& B1 E
var Memory = xdc.useModule('xdc.runtime.Memory');
, Y- {2 P, Q; o3 M' J2 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- z, Z: n* S. p6 [  `6 b. _' l0 r
2 O3 u* {" s! E) j+ T* V3 d" b- s/* configure System module */7 I$ p, O% v2 g; j* i# A8 Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* V7 E0 k! M. V! u, w! aSysMin.bufSize = 0x1000;
2 |% u2 _2 |% D" dSysMin.flushAtExit = false;# @! w0 ]- |- y  f$ I" b$ x

- h. f, J0 C: i4 o: \5 `var System = xdc.useModule('xdc.runtime.System');) ~$ h$ b$ b1 \+ G7 b8 b
System.SupportProxy = SysMin;1 I' U* Z8 L' L3 G$ v; W

  X; q1 O  m" \- s' h/* configure SysBios to use the lower half of Timer 1 */
# v( E: O; r+ \& `$ ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; P& e7 ]% z9 E; l; ~( svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* q8 b6 f$ M8 D# g. x0 Y$ x6 ?Timer.timerSettings[1].master = true;
* W7 t2 [1 |4 cTimer.defaultHalf = Timer.Half_LOWER;
  ^3 s; w+ H0 E& K% i6 e% kClock.timerId = 1;; |2 l2 {9 ~6 n# y8 K

, s8 f  E6 J( |# l, m# t$ Z% X3 E5 [; v2 J$ T/ E
/*- H* ]1 @( h5 w  l: u) r
*  ======== Miscellaneous Configuration ========
  s: X# k( x+ J( f! `  m */
" ^4 P* n. C% p1 v3 m& Z# P; q
6 s- G/ B: b8 @/ |% U" o/* set default diags mask */% L7 w* w. L* R# k' `% I, U
var Diags = xdc.useModule('xdc.runtime.Diags');
: }* c8 j+ \8 a# jvar Defaults = xdc.useModule('xdc.runtime.Defaults');" ^# T4 w, ^$ @6 c: O& m# O

) k4 e3 P: y9 y: \" _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% N! B3 \; ]* m3 w& tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  k* ?$ k) E/ w7 c* _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& j2 A9 u% B' f) y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 j. p+ ~2 @$ h* l) I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, Y: Y5 b' [3 Z0 UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 Y9 n" ^% C0 z5 O; _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( ]3 \- h$ Y' ]. @5 I1 Y( ^! c+ j" v- t( ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& N" ~7 c4 }5 L! O; yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 ?& B) l1 g. F0 _9 vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% Z( A3 J4 u7 ?' C1 Q6 A5 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 \- s/ j/ X3 S) {5 K8 ~7 }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! @' W* d2 P& a0 b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- s+ c- G. o1 r% DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: \/ w" h" C. r3 p* O

: R9 I5 k- J0 y: G' q9 J/* override diags mask for selected modules */: O' K+ e9 y1 W1 F# O; A8 t' g
xdc.useModule('xdc.runtime.Main');
. u' I8 |$ F9 h0 R0 I4 r# XDiags.setMaskMeta(
/ K6 w6 l  {. t6 @/ Q    "xdc.runtime.Main",
1 x' z1 R! [# k) h4 Y2 V4 J8 G    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 c/ J) _) U2 c. g) @8 ?
    Diags.RUNTIME_ON
7 e' Z; Y" G3 Z" \6 t" |1 W; U) T);
9 p/ H$ r8 u' c$ ~
# ~' }  b; t9 Z) [' b% Y4 I5 V- cvar Registry = xdc.useModule('xdc.runtime.Registry');
$ L- Q- b* i- D+ j% fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; V- D. x# ~; @; Y8 o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% {$ ]1 U+ i( x* m# e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' [! T/ h, \& m4 J1 ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( n" z: b1 c/ E

2 M" u# p3 |& N- X/* create a logger instance */
" [( B% N7 H! |- B" q2 a; Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 M' o& j7 H- W1 @var loggerBufP = new LoggerBuf.Params();
/ j7 Q) d  W2 f3 [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" c0 a7 f' [: G: k7 H4 c/ s
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' V+ D, \3 Q7 _' {
9 P8 R, U8 t- N! ^: ]
var appLogger = LoggerBuf.create(loggerBufP);0 ^2 F2 v3 I& ?, v8 j
appLogger.instance.name = "AppLog_Core1";6 C7 O. G$ k* g
Defaults.common$.logger = appLogger;
2 b$ |! I4 c/ Y1 _  T# _+ X5 T+ K2 W- oMemory.defaultHeapSize = 0x8192;   
! k5 X( x  b1 iIdle.idleFxns[0] = "&LEDStatus";% B, |1 u4 A9 Q: X
Cache.initSize.l2Size = Cache.L2Size_32K;
/ E, J  R0 A6 p3 F
& s9 U( u. Z5 G! T! R  l
回复 支持 反对

使用道具 举报

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 */: K+ f# ]. b- ?/ N# w# g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 v' y: r1 ]+ t! `- Q5 S9 |
var heapMemParams = new HeapMem.Params();4 h* U! B8 l$ v
heapMemParams.size = 0x4000;& \0 m% G) O& f5 ^4 g+ R& p% T: b

, n8 {0 e3 D9 T# _; a* x' G8 [var Memory = xdc.useModule('xdc.runtime.Memory');- ?2 v0 p1 L% K: |* D% c- m0 b8 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ H; `0 O7 E1 u+ x9 J# v9 P( r
+ @6 Z8 r& J, _9 K7 c我大约calloc  每次共计大小为5K*16bits,+ Q. q. v6 f8 H: r! j) i9 h+ S
而默认配置才0x4000、需要改大。5 I/ j9 L. f) V0 V% j3 X4 R8 z
! q. O; e3 {1 W" \  K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 I0 W6 |3 B' l3 b, z( B: T
Program.heap = 0;5 d/ N1 N3 G0 x. P
Program.argSize = 100;  /* minimum size */4 C& }: k* N( P3 p  q3 ?6 {
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-26 22:08 , Processed in 0.042070 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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