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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 B* c# y: k2 r, e$ T( l% w

: ^$ p2 h+ M+ h$ v, {) B: N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) `7 y5 W9 I' N

$ w3 s8 c: B+ R7 K2 w其他程序段。。。。。
) T% E# ~3 A  p 2 L( H8 G7 f8 v/ L1 S
   free(x_d);! I& O9 {1 {' {, j4 Y

; H1 N5 W# Y  d使用DSP侧单独调试功能,验证动态申请没有问题,
2 b8 Z9 l" }" B+ f1 D/ N  U" u  ~" ?' o; U8 V/ [
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 B7 ?* m2 _. ?; H( Y4 Y
4 @# ^& y4 G6 @
7 \. j' n( m8 I7 }3 h; I

, b; U  r! [5 d
: I: y, P: b! c
% R2 _: L! ]1 A% u5 n2 U$ {; f/ j6 G5 M$ x, \3 O+ ~& t

) y0 ?1 W) f$ R3 x  o6 X
& d0 S1 k/ y- N- q) I5 F. |: _9 q  W5 [

7 ]9 ?, t5 t; P* H7 I
分享到:  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 */( g8 }$ Z4 X  K% ^( v
Program.heap = 0;$ J! ]0 X. s5 F+ [
Program.argSize = 100;  /* minimum size */
4 X+ n+ W  `# mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */5 u5 \4 @. Z2 |# O2 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* P0 |. d8 E  K& b4 M6 g
var heapMemParams = new HeapMem.Params();+ q8 L8 P, }' D- Q& @6 G( D4 A. Q
heapMemParams.size = 0x4000;  _4 C/ r8 u: ~, i1 X- _

. ^- B' s% e) s# x4 }8 l; Wvar Memory = xdc.useModule('xdc.runtime.Memory');! N5 q! j! C- X" b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 f. Z, _' H8 a
) {3 V0 \7 D! J+ y
我大约calloc  每次共计大小为5K*16bits,
" D6 n; ^4 ~' a& V6 H* T1 G+ @而默认配置才0x4000、需要改大。
7 ?8 f8 a1 T/ [, V2 M+ F* P' }& u3 ~. h& c( K
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, y" ]6 B( t+ r1 l2 B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 V" g5 a8 J# T& O6 b2 r7 s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ y7 [& i; S' u! z/ a
! S3 ~  y9 P1 k8 Y5 ^3 l4 s, O
是不是需要在DSP.CFG中进行配置
6 e3 R# `, Y' Y2 n  n% j我现在的配置为
5 T  j4 U0 p/ K6 h, b/ R+ z( R' `0 R5 t4 @# _7 C  x
/*
# y$ K! n8 I3 l4 N. C *  ======== Operating System Configuration ========; ~0 O% o* u/ Q) T! P1 l
*// V  I( I  h9 q) e% C' G
- t7 _5 |# G; y) n. V/ Y3 h
/* no rts heap */7 \) b( r$ n/ b/ K
Program.heap = 0;
# ]+ o5 Y1 _7 G7 K( K8 Z, AProgram.argSize = 100;  /* minimum size */
1 P- ?- K8 Z0 R4 PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 e* [. P0 c+ j9 c) }( D, y1 @" c' }( W
* Y# f; q. b. V$ Y& t/* create a default heap */
4 }9 ?5 Q; Y! f5 ?5 Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 q' X; L- Q* s7 W: q
var heapMemParams = new HeapMem.Params();
2 Q3 k7 I- ^2 o( Y/ W7 T) IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) E: E. s1 U$ v+ h) C2 [' n3 b" Q
; R& u5 [( j; Z; l' y) u
var Memory = xdc.useModule('xdc.runtime.Memory');/ F1 W# e2 Z/ r. y1 O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 p/ R! L: D+ j

. h3 [, L' j% F& R% {% Y2 F& s/* configure System module */6 H" v$ Q7 p- A0 Y/ g
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 i8 O8 l. c1 V( f5 l3 Q. b: F( j6 i0 [SysMin.bufSize = 0x1000;/ W% G% ^$ g2 {. L  H# v0 c7 X/ O
SysMin.flushAtExit = false;8 p! L! ^5 x0 o: F

+ g+ a# y6 O8 ^" f4 z4 Q  Vvar System = xdc.useModule('xdc.runtime.System');$ j# n! m6 {  v# [9 @% w
System.SupportProxy = SysMin;
+ j0 ]' K/ }& N6 F* E; i8 d9 G( s% ]* s4 [0 u0 l4 |  J9 e
/* configure SysBios to use the lower half of Timer 1 */  D* i, N4 V; _7 b! p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" S/ y4 [: i. @: [- J" T+ O! Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');) i  L* Q9 f9 N2 t* |
Timer.timerSettings[1].master = true;
0 j3 b! T1 R9 S/ eTimer.defaultHalf = Timer.Half_LOWER;3 |  [$ V: k+ S% B% M. J+ v
Clock.timerId = 1;+ V5 e8 J1 e/ q+ e+ ~1 f. ~
- U8 X# c" q$ I# O4 w# E  f
# e% F# Z7 C* j! A  {0 ?
/*& g% }+ B# L9 R- X7 o
*  ======== Miscellaneous Configuration ========) I1 @2 i* P! E6 Q' V2 M7 W
*/
% _8 N( R0 ?5 \8 y7 J) t8 @' E: t9 t2 ?7 \" Y8 a4 O* J4 U
/* set default diags mask */1 }7 I/ ], `* k% D- ~- \) H
var Diags = xdc.useModule('xdc.runtime.Diags');
8 F/ `- k+ R$ o% Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 A+ A& p) p8 j! E& `) Z) E
6 R0 ]- @0 T- Y" J) g* [% N6 jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, K3 |) j' u* V( S; ?) \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 H/ I9 i( w5 d- e- T9 a3 F. p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 D; F0 Q  N3 G& H. cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! E- s2 }5 a$ m: |0 |" }Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! P" D' m1 i% Q, s6 O. b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  Q/ P  i- D1 {4 o* S/ oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" M+ q7 Z* h7 N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 k2 ~3 q. b* P% fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- J7 y0 p% y0 Y6 |" q. l
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 X+ f" B" M# {+ t* ?; J& ^! Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 `* g8 ]% E" k! ]. I' m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& A! V% S. G9 P2 z0 K- UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ z5 H, X" W3 SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; ^+ o) \& k% |* ^* ^5 W& J
1 P+ \+ N" B7 g  j8 P9 f% g% M
/* override diags mask for selected modules */
7 D- B4 ?- g. k8 I9 _xdc.useModule('xdc.runtime.Main');  t& |6 z2 x) s! l* X( e
Diags.setMaskMeta(
/ |2 \" C5 `8 w! p1 |    "xdc.runtime.Main",$ V3 |% t5 H7 K1 {3 a1 L2 m. O  k$ t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' ^; ^, |1 r. O8 n0 t# p1 I    Diags.RUNTIME_ON
0 r# K- z7 d4 I+ [2 a7 X/ s! n) T);
* O6 r0 ^9 U0 T" c# z+ R8 m
2 |! z. o  Y0 Q% |2 K- F4 fvar Registry = xdc.useModule('xdc.runtime.Registry');
7 P) d' ^% w3 T+ H- `( f& i3 oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 ~; E- o) f" cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. L# J% p6 s/ j, DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 `3 s; x" l8 }' t# u  m3 _2 X* w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 Y' Y7 T& p6 d) o2 J4 s. J0 _4 t; \: `! p, s( K& ]) e9 S4 K
/* create a logger instance */
: |  m; c& @8 v0 l; h% E6 Zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& u4 p% e( @2 N; h$ y4 X; Fvar loggerBufP = new LoggerBuf.Params();
4 y6 ]+ h& v) C/ IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 m$ k7 f6 _# U) ^7 I1 ~$ ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. `- Q0 ^* _1 L! ]2 h3 d9 O! K8 {" v! J, y
var appLogger = LoggerBuf.create(loggerBufP);
% N. z; ^3 r+ ~# W# S/ p; ^! iappLogger.instance.name = "AppLog_Core1";3 _: i; ]. r9 g$ x# a
Defaults.common$.logger = appLogger;! [/ ~6 d9 A3 C5 M  e, K- t
Memory.defaultHeapSize = 0x8192;    0 r) E3 ^/ q# ?6 G
Idle.idleFxns[0] = "&LEDStatus";
  |9 H, z# J% {1 w( ?9 d3 z& r( C% jCache.initSize.l2Size = Cache.L2Size_32K;
9 Z3 ~: _5 D( c
  _5 a! H. U9 t7 k8 I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 08:24 , Processed in 0.042631 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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