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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 E" T7 Z; O7 k" E
! D4 r2 w# s0 Q, }  E* X
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" J5 a& U3 l$ e+ ~+ u' _/ _( @5 R6 Y3 l% \8 }6 B
其他程序段。。。。。
3 W# @. g  [+ t2 ~ ' w6 M/ L+ M( b( j1 V' v5 C
   free(x_d);6 A* C: w9 _, c  X6 x
/ i0 K  S# ?5 \2 t6 ^
使用DSP侧单独调试功能,验证动态申请没有问题,; @. |: e' s2 ]- S: F, e
. O9 ^! q5 I. J4 F; a. g3 F+ s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# G1 i& p0 `% \: n

- t9 z8 ~* i2 R) f3 Y* H
% K& `% x2 v, u' f9 \8 E# r4 S) n
9 C) c' c3 E/ x5 t" c# |7 {$ H" r3 A

' }4 M4 |8 Z& j* i
) M+ U3 r" f# A8 e
8 _7 M. h1 d( z
! e1 z: M' D6 l& c2 l7 |$ U! A( b. H% c; \) C$ |3 j$ f

) ^  l* |" b. C4 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% O  r9 A2 T* H; W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ q5 c1 c2 ~7 ?2 F$ a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 `9 e2 f( Y6 v  G2 @3 K' z1 z- ?
- R9 Z, M: ~% p6 i6 V8 F, O( R, V
是不是需要在DSP.CFG中进行配置
) Q: j$ y1 f9 {# `: w. ^. d, {0 E. T我现在的配置为
( v$ w: U* s2 v" U
- h/ K8 k0 T/ s6 q# z. K+ Q/*
1 g9 X8 v7 b& M1 r. T$ E! t3 q *  ======== Operating System Configuration ========
) p' ]3 h. L% Y% H6 y0 n2 ]0 U *// p* o; \/ z1 E$ p; F7 }" w* m0 t

: \' g7 I4 D, \( Q/* no rts heap */
& ^" ?. v3 K4 W5 h6 xProgram.heap = 0;% S- G2 x+ V+ _$ U! q% J9 s
Program.argSize = 100;  /* minimum size */
4 C2 o: V0 O- |! T& T& t4 HProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 n/ Z6 R4 U/ ^, ~
) I! Q3 L! X; u- K) ~% x
/* create a default heap */8 w# }7 b6 _# n0 G. f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 m/ _: |; T9 l! y9 z. @" W7 d" |var heapMemParams = new HeapMem.Params();& n/ u' W4 m* r; T$ E
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ {" G/ s, S4 Q, D  _4 S6 s4 \1 j$ C5 U+ V
var Memory = xdc.useModule('xdc.runtime.Memory');
, p+ S# y8 n+ @8 G1 R: {( k, hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, F& l6 @: k; @# a, R% y; e: Y, X' U) f8 x2 s, ^
/* configure System module */
0 D- Y1 E7 ]$ g1 @; \0 \8 evar SysMin = xdc.useModule('xdc.runtime.SysMin');0 I) ]* P; l1 m" b$ E# j3 ^
SysMin.bufSize = 0x1000;
4 R8 V( [% v0 ?' A( U* nSysMin.flushAtExit = false;
! r# m# x3 W, I. F, o8 C5 c" y) Z" R( H  g0 {9 w1 a) e
var System = xdc.useModule('xdc.runtime.System');
( [) t8 s+ m3 S( y( A4 \System.SupportProxy = SysMin;
! m3 b6 C4 [# |6 Q! {9 G# ^3 s; U4 x1 ^- [
/* configure SysBios to use the lower half of Timer 1 */
3 n' n5 M3 w- F% y& Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ [" b0 R! [& f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  n; l! r  i: m# F6 V
Timer.timerSettings[1].master = true;+ d5 A3 C# e+ P* X  T
Timer.defaultHalf = Timer.Half_LOWER;2 R- _  O3 a" }( c0 ~, ^$ B
Clock.timerId = 1;* y- X# y2 h+ ^6 a! j3 W% N9 I

) n; l3 ]5 \4 t- o
+ O7 Q% V( }1 C3 V7 c' X: ?+ }1 p& z/*3 W. ~7 P" l9 e4 J( I
*  ======== Miscellaneous Configuration ========0 _9 H, l. m8 N: v: c/ o7 t4 \8 T6 J
*/
- ?" X4 `1 j3 d0 t8 [$ G8 r- `$ w. k' ]$ U+ B
/* set default diags mask */, j9 h2 r# M# W$ d4 q. J9 ?, D( q
var Diags = xdc.useModule('xdc.runtime.Diags');
2 V' V6 c. e6 ~5 T& y/ g! @var Defaults = xdc.useModule('xdc.runtime.Defaults');
; M& J  @# O8 S7 x+ v( W! u: W8 [  J$ @! W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 Y/ i. S+ T" U$ s9 d3 BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ P/ S. S/ d1 c. m8 ^, L/ s' F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- |$ V, j6 P. b# [6 s3 w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! g; G: l4 s$ m) ?  D2 N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 u  L! A% W7 v* T3 K+ SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 q' a9 \9 \4 BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 P8 V# W. Q! ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; J* o4 n9 ?) G+ B$ s0 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) v; B5 @; G0 H$ p- c
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 H# h5 L! Q2 r1 s; J/ Z8 x: {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 i/ O- o# ^8 N  i# X% }: @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' o0 b* b: X" W3 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 J$ G1 K( Q$ `. J/ M' w
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 U  l! _; v/ h3 M! ^* ^8 N9 u- A9 N2 R
/* override diags mask for selected modules */
& `, f/ ^7 }  W+ L" [xdc.useModule('xdc.runtime.Main');
/ M9 U9 @* s% d, P- b1 mDiags.setMaskMeta(
$ U8 R8 D3 q# K7 ^$ C+ @/ G    "xdc.runtime.Main",0 v7 `( L1 U, E2 f' e" w0 ~  i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) A' ?$ W! O* P- O, v) [% T
    Diags.RUNTIME_ON5 _8 j2 G; b+ G. P
);
; u8 W- t: R- H$ I& \6 n/ |9 h: U1 F3 j2 M" `9 }
var Registry = xdc.useModule('xdc.runtime.Registry');
- b# }. b& v: ^/ ~* fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 H) l; Z9 u2 _$ o2 bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' w3 }: k1 u6 [% p# K2 F. `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) F5 C) e: ], i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' l$ V* F( r7 z) r4 Z, S
5 u+ l  f* U$ r, t2 ~
/* create a logger instance */' c# Q4 F; g, y8 r$ Z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! Y% ]( T  A; R& D; ]var loggerBufP = new LoggerBuf.Params();0 M' u( W) _( D/ s* E4 d& \! Y) d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) A" m, |- f! T" S7 C: l  P6 `( ^- QloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. E0 I, c) N$ h" n2 X4 V
# Y) d2 S3 m# vvar appLogger = LoggerBuf.create(loggerBufP);
% d8 L0 |/ s) F4 ZappLogger.instance.name = "AppLog_Core1";
/ o7 `( m* m! v8 GDefaults.common$.logger = appLogger;
  N' N: T3 d# ?" a' c% P% m7 X: s4 IMemory.defaultHeapSize = 0x8192;    / b% ?5 U8 L( H& r  P
Idle.idleFxns[0] = "&LEDStatus";
* O% @0 {5 x6 T. yCache.initSize.l2Size = Cache.L2Size_32K;
- V/ R, ?( {3 o6 h' }% {2 n* t+ d: Z
3 Q& P* }- Y* S( g& {) P& _
回复 支持 反对

使用道具 举报

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 */
% H0 @. z, x# f. _, T! lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ g" @8 B- r- p6 [0 }3 Evar heapMemParams = new HeapMem.Params();
6 u, B3 [! Q, E* i# t5 CheapMemParams.size = 0x4000;0 o  t$ r* V- P8 W
! o2 r! M# w2 _& E/ o3 U" B+ M9 X
var Memory = xdc.useModule('xdc.runtime.Memory');+ M1 Z+ i+ C; l8 y& o# B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 y+ h# u* p, |5 E+ i7 j! e% b2 Q7 ?( l9 n' ^9 K- ]
我大约calloc  每次共计大小为5K*16bits,
; q* ]$ W6 Z: X3 ]- N9 \6 A5 v# i- b而默认配置才0x4000、需要改大。
* |0 x- V- j1 Q8 Y, w
9 q" n1 ]* l9 h5 l* F; T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 b% f: S2 L0 ^) e- J2 T0 O+ l
Program.heap = 0;  ?: y5 y, P. M7 K  d3 f1 v
Program.argSize = 100;  /* minimum size */
1 g/ `: k) y0 w+ E/ m2 K$ q; IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 02:28 , Processed in 0.041762 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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