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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& A7 M* e) K" g) W
, v0 U( |, L+ o8 S  N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 d" X2 k6 Y* M6 |' C
. p3 r* m' K) a# l% X' b其他程序段。。。。。
5 F1 Y7 D# E7 x& A4 g " g, y4 ~  |4 A2 ^  M, f2 a* H
   free(x_d);
+ {7 z7 ~" J+ ]1 n/ D4 G1 }
' T0 {( v) B3 q1 n( j: s使用DSP侧单独调试功能,验证动态申请没有问题,5 n. [3 p" I( V: h; C! j$ O

, e0 I+ d/ r) x+ m5 Y" `3 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. Z: Z( H7 k( N1 x  T

7 ~- M6 K7 Y; f8 c9 L+ k! l. Y0 V0 \0 M( E" ]2 p

) L+ W% p' E  u3 [4 m
  ^; T' r# l+ J. Q% o2 c5 e
/ u8 _) i5 a7 N6 `% g' c, e5 N; z0 ?( M2 k
1 f8 D" M/ T+ ]+ s

; w# R8 E' I6 z$ N9 |" Y. W
/ I% w5 Y* k4 L) u1 a
3 k) O8 l* o7 U. P7 a& @
分享到:  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 */% x# R# g8 c8 d- a
Program.heap = 0;9 F) a. ~% [# J3 X, h7 i
Program.argSize = 100;  /* minimum size */
$ }. h0 ?. u/ T; p" \6 UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
$ U( L8 Q7 \) s  {$ k; ~0 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ x. V" b/ ?& [, ]' W5 Pvar heapMemParams = new HeapMem.Params();2 B7 v# {( x6 |
heapMemParams.size = 0x4000;
0 |- }8 [1 `+ N" H3 ^# c' ^0 _$ P2 S
var Memory = xdc.useModule('xdc.runtime.Memory');
! I$ o1 d1 R0 U0 a8 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 v' P; u1 |/ S" y& {; B" G7 r9 A- T$ J, A
我大约calloc  每次共计大小为5K*16bits,
( M, H1 H/ R2 A7 {( v( n* z, {- ~而默认配置才0x4000、需要改大。
2 e/ u3 C. c! e' @+ h& H; Y. }9 A' w; i; K) V2 ^/ p+ ~
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明; J6 q/ |' x) F8 x% X: S
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# h2 B+ u; \5 _& o7 r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ W' G% a4 s8 D+ I. V2 u

- G6 @5 d* t2 v是不是需要在DSP.CFG中进行配置
& E: g# J6 p' B( m3 V! \/ _我现在的配置为
+ N  M3 u3 Q# y( y: }
0 ?5 q4 |) W+ q: s- e/*
. y' E9 D6 F. N$ ~6 ]$ J& H2 z% W *  ======== Operating System Configuration ========
8 O/ U* Z/ a# @1 C2 ?; ?3 i. f */
  K! R0 _- ^: W0 y$ R
5 ]$ Q' P2 s( W1 J- x) C/* no rts heap */
5 v0 G1 @7 T) L+ q" ~3 TProgram.heap = 0;
* J- H: Q# L& M4 _, G/ f; \5 u- `Program.argSize = 100;  /* minimum size */  h& [+ s4 E) Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, {/ Z% ~  z9 ?  }, ^

" [% J9 {4 ^4 E4 [/* create a default heap */. U9 E! l) M9 h1 j3 g9 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- \' R, z0 V) `! i* J1 G  [( {6 V
var heapMemParams = new HeapMem.Params();
  b* ~/ t) X8 q0 D. M$ R7 C6 g: _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 i1 f2 Y5 j" I7 w/ ]. C5 g

9 i3 A% z7 I, o9 [3 I1 S3 ~
var Memory = xdc.useModule('xdc.runtime.Memory');9 [. X4 T( f; b1 m) _9 m3 y5 a! z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ w2 a. ^0 T9 F
. ^. t  O9 ^+ u
/* configure System module */
# p9 O$ V7 H, z8 ]: Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ x+ h$ C& j' [7 Y* E+ {  P: C
SysMin.bufSize = 0x1000;
+ D5 e3 n# i8 q% YSysMin.flushAtExit = false;
: p0 S; ^. k. q" u+ R  p
+ \7 v0 G% D6 D% w: kvar System = xdc.useModule('xdc.runtime.System');
0 l$ S8 [  J* g' _' L9 ~System.SupportProxy = SysMin;
" |/ a' ?. Y  U" [8 `4 S" R
( E2 [4 I+ l8 d/ e5 z, Y/* configure SysBios to use the lower half of Timer 1 */( G- o3 i  Q2 Q2 J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 C) G5 y* Q% n# ?; s" Z; Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');0 l! X$ z4 ]8 @' P2 u
Timer.timerSettings[1].master = true;& G# l, @- D0 |7 H% a, A
Timer.defaultHalf = Timer.Half_LOWER;) U* K, Y, b, o: B& q* E* e5 y
Clock.timerId = 1;/ q2 _& {2 R0 J

6 i0 ?6 Z& A- t9 {4 d; b  V* R2 w, c# |& \/ @! t- d
/*
0 o# B7 `6 u, Z. |5 Q *  ======== Miscellaneous Configuration ========7 g9 ]! H0 c: J3 U
*/
3 P& ]! k% C" p2 {/ j) a$ n
0 ?1 u; x8 B4 N/* set default diags mask */
  k5 ]) U4 T' u- z$ C! Svar Diags = xdc.useModule('xdc.runtime.Diags');
+ _1 F# ]/ B- y7 {0 `5 ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
* j: g8 j: V/ g# l+ f: q
& c0 A+ s6 _- ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% |7 Z4 h- h; e% \" y8 QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, |: R- g# d9 p/ RDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 I' d& Y6 {" n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! `$ D+ u  C& A9 [2 [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 w9 D* \! g7 R" `  G3 N0 s/ [- x% Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 F8 P3 y0 Q" c( T5 P& f# E4 j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ s* m3 I0 o$ z( L& Q- D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 {) T5 b) g' N5 p8 G8 J) o* NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 M$ W- u: @, W) y6 v( g. A: jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( g& i% U  Z6 V6 f  V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 I: L8 Z" A: k( |7 |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& Q, X. F9 \7 xDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 k: O. J( V- d5 n& pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% x0 O! {2 m. Y! H' l+ |2 B7 P' V$ X) \# S
/* override diags mask for selected modules */# L# [9 p! q6 T4 U. D5 V
xdc.useModule('xdc.runtime.Main');
0 l8 H; G( K/ b3 QDiags.setMaskMeta(, M) e. J4 a6 q- L3 Q
    "xdc.runtime.Main",# D6 z4 R: X9 n( F4 F0 \
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- s, w' i! i/ L) d
    Diags.RUNTIME_ON% h' w+ m- C7 m0 @
);, c: @5 p0 W! F" ?/ S( y9 G, F. ^' E. R

( W# r. k  |- ]+ P# M& lvar Registry = xdc.useModule('xdc.runtime.Registry');
# }9 V" s2 `, o# u& D6 ]- rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. O8 c( m* ~" o& C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& T4 p' a2 ]+ v4 l) a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ E! L7 X$ Z: o# ]5 T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 N/ g9 O& ^; {& M+ F0 l

" L, M3 }- l  u( U7 g/ ?/* create a logger instance */
2 }8 {1 Q  e) l0 C9 Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  ~1 p3 w6 ^1 A
var loggerBufP = new LoggerBuf.Params();! S8 q5 a0 o( c' Q2 s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: D( W, W$ P0 ?. V: N5 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' _! b) X! L( S8 s& q4 G9 s! ]" k' _4 X* m  @: v5 l: J* v7 L
var appLogger = LoggerBuf.create(loggerBufP);
- V% w- I$ @4 lappLogger.instance.name = "AppLog_Core1";( g" d/ g1 g1 C, \0 {. V
Defaults.common$.logger = appLogger;' o' D) R; a+ ~: r5 L
Memory.defaultHeapSize = 0x8192;    $ U9 _3 U# U- `- J
Idle.idleFxns[0] = "&LEDStatus";6 B. X5 Z- p  k4 W9 U
Cache.initSize.l2Size = Cache.L2Size_32K;9 T4 N4 ?1 H4 o9 p! H: C* S

# t0 ]4 }+ _5 T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 00:26 , Processed in 0.042787 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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