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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. u; {7 P# L, o$ K1 Q4 X- R4 y! F
! u2 a) N. A- `5 d; ^0 ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ \6 H; {1 c. M4 H4 h
) ~: g3 I. P4 Y; Z其他程序段。。。。。
2 u% R) W' i5 K/ r) f  W 0 ]2 E6 S* T0 }9 M1 g9 q% k
   free(x_d);
5 _% U# C% ]# u2 y+ Z2 K5 P" n; h* t+ i$ Y( B; [
使用DSP侧单独调试功能,验证动态申请没有问题,6 n% ?& N; z7 q' G5 i  Q- i

$ |8 Q; [$ ^5 T' |' e& N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ M" ~$ _" w  C% B$ l) B0 M
0 R" `* Z( B7 {; I' w  ?
  T3 k2 Q* u+ m- H. n3 n
' e- ~! H) }$ ^

+ S) y) ?1 ~/ v7 A4 Z9 f+ m& Y) l
4 L9 a" B' w' ~
" V8 H6 W5 \' F" W9 b! ]5 |, m9 W/ g$ K) d2 O( q; I

1 J* P. Y8 E, P+ `4 d6 J$ H  e7 Q4 ^0 f

. ?# T5 `( f3 F  A/ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# z9 J" }/ C; p% O  u4 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- ]- \8 Q/ e. Z. ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 f; R/ ]/ l( C" ~! i
4 _" k; Y1 [* `  X  F
是不是需要在DSP.CFG中进行配置
& U# W5 b6 }6 j% g& Z* U& d我现在的配置为
7 ^& X$ r! X) k0 ^7 l* Q: O5 Q0 \- ~' [' n; e
/*8 N  ^8 P, e7 v8 H9 v% P! R
*  ======== Operating System Configuration ========
0 r- Y2 [* J9 c$ j- A# l3 {9 _ */! M* g9 [  }( J- z1 ^

) P0 N2 Z* Z& y! I/* no rts heap */
7 P3 @: q+ X1 s9 ~/ s9 S/ ~1 iProgram.heap = 0;+ {9 }3 ]  [% d  E$ m. ]
Program.argSize = 100;  /* minimum size */
0 N2 q5 E# ~# i' f7 YProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! Z* M$ K- J% z6 _$ V- A1 k; J1 h

& A2 [1 r4 q$ n% \5 j1 U/* create a default heap */
, @# x% ^  {& C3 a0 r6 E: kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ h" V5 T) N3 ^- {3 Q1 lvar heapMemParams = new HeapMem.Params();
. O7 Y1 p- x* EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ o2 b7 x/ C& d' \8 [  N. P6 b8 B* k8 ~& o* Q7 t
var Memory = xdc.useModule('xdc.runtime.Memory');0 n7 N' {0 }% W7 n. h* `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# U1 ?0 [; Z6 x- f6 [& _- [2 R. }* S3 ]
/* configure System module *// w; e) W- Q" a9 X( E
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ L; S* l6 j: V4 j  i0 L" q5 S' rSysMin.bufSize = 0x1000;5 n: z) W; h( j6 l' Q
SysMin.flushAtExit = false;
; j# |5 l9 Q, [0 v$ q$ j- Q  V  V4 S! Q: k" i+ {9 B  s+ N
var System = xdc.useModule('xdc.runtime.System');3 S! E# x2 X. I5 n
System.SupportProxy = SysMin;
. G* Q5 N1 q1 [  R' D2 Z! N
" M  b8 B  c) u6 w2 o/* configure SysBios to use the lower half of Timer 1 */
% G( y3 I3 L6 `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, b- e! H5 i0 \/ W9 Y* ^# `var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ O) w- V2 n5 }/ m' r( K& T0 ^; `
Timer.timerSettings[1].master = true;
5 ]" Z- M+ ]" a5 zTimer.defaultHalf = Timer.Half_LOWER;
! ^2 E4 }- f# C9 h, ^. LClock.timerId = 1;
, p4 Q- K$ u9 w/ k/ }
' P  {# O5 l$ s" n* Z
! k: p/ ^! i; P  k+ n- k  B/*4 n! @/ o% `7 N& F$ `5 n8 I: `
*  ======== Miscellaneous Configuration ========
5 t: e2 I; }- X% \/ @. c/ L3 ^ */
. z9 G* e- ]2 @8 B- q' n4 T: m
/* set default diags mask */% L7 }- p5 T& R! A) c) j
var Diags = xdc.useModule('xdc.runtime.Diags');6 T- a8 ^* h; r
var Defaults = xdc.useModule('xdc.runtime.Defaults');% b4 R+ x6 `5 n# n: E7 K

+ J' ~" v% Z7 j" D, T- tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 y, ]9 d5 `+ R5 f" w- I# v/ N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ D: f" M' H! U" aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 n6 y" K9 D4 U" N/ d# N  g$ F9 nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 e  l! Y5 J4 s) o1 g5 w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! F6 [/ @4 m& b, T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' O! x' B0 M* `: H2 QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 v! S  e5 K2 ]: U+ @6 s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  [7 s* y; R9 @7 ?( a4 w  VDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 S  a' m+ D* KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 |, G; ^( I8 L2 R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 |7 d) d5 y5 G; F, R, \" {" ]" u" t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' R- l% T! M  j6 K- j, g: {& \, E
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* t9 }7 L! T  j4 }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, t" x1 m# T+ ~% U3 t9 }; |$ N

" M0 F& h& @2 g- l/* override diags mask for selected modules */3 S" Y# Z5 }5 m! F. e7 x! u
xdc.useModule('xdc.runtime.Main');' _5 y6 ^. ^! }1 D! W) Q
Diags.setMaskMeta(0 x: ^; P- O; c/ ]+ _
    "xdc.runtime.Main",
1 H' _# }$ k3 W- I; t: [/ f" k  j/ J- V    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 [# k) b+ p3 t0 O' Q; Z- o8 h
    Diags.RUNTIME_ON* r+ ^6 x* X. d8 g
);5 ^- [3 r  t8 }) X; v. c4 {

$ c& ^, x" N4 t5 Jvar Registry = xdc.useModule('xdc.runtime.Registry');9 n0 _' Q1 Z1 V% g. A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) n& p$ `& g+ ~% E2 ARegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( Z) z  D! [* l4 CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 s, P, Z  o( H* pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# A, u0 o" @0 a( F9 b, E# h5 i& M" L
. y8 V9 w5 [. g" W- r
/* create a logger instance */- @* f4 \  G+ O5 V6 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) u7 j4 X& H0 _$ ~+ B& e
var loggerBufP = new LoggerBuf.Params();3 k, T* R! |( j% y9 d, c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! C/ s  S9 C+ e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 R1 O* k- I1 Y1 `. r4 _1 K' j# I% X6 T* s, t" N
var appLogger = LoggerBuf.create(loggerBufP);
- ^/ `; x, O8 j) b0 s( H2 wappLogger.instance.name = "AppLog_Core1";0 N# T7 P/ H2 M: D
Defaults.common$.logger = appLogger;! K( `0 m1 G3 l0 I0 s1 Y
Memory.defaultHeapSize = 0x8192;    . d* U6 |" @6 h2 V0 `4 w
Idle.idleFxns[0] = "&LEDStatus";
) U: C* |9 ]; s5 b: bCache.initSize.l2Size = Cache.L2Size_32K;+ R/ r& P7 b4 G+ L2 V5 I5 K9 n
4 d- W" c3 f( a6 t. G
回复 支持 反对

使用道具 举报

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 */
/ v7 Q. J1 Y$ i/ Y) Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% s1 v  B+ m8 n' v" q, E9 x$ ovar heapMemParams = new HeapMem.Params();7 x, X( r6 V- t( x0 G
heapMemParams.size = 0x4000;
1 a: B9 m. E6 G2 b  e2 q8 s& r# t  p" L  }
var Memory = xdc.useModule('xdc.runtime.Memory');
3 n! J. S+ J* B5 k# |. |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 s& P/ Q3 B& q8 ]2 P7 d1 l$ t' x
我大约calloc  每次共计大小为5K*16bits,
3 @& B- g0 k( ~5 _: t' q! v: ]而默认配置才0x4000、需要改大。
, q3 H# q( T) k0 Y& J
! C9 W5 ]4 ?- d6 A' b$ w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ B9 f5 h; V5 O8 Y7 p
Program.heap = 0;; ^% i1 L8 m+ F* W& H: b
Program.argSize = 100;  /* minimum size */
% K1 A# w" M; B  m& ~& c$ m. p( fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 12:57 , Processed in 0.041564 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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