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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! Z, ?- W. U3 i  B% i
& |9 Q$ Q2 D( S" q; }. |- S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: M8 @% f) t9 m6 G8 D& P
9 j, ]  |8 y* x. _其他程序段。。。。。/ L3 Y& I1 z# [2 x/ D/ t- `+ w4 l
, h* c$ L, K7 Z
   free(x_d);5 |, d' w2 ~, |' h$ j$ g

+ N4 _( h4 ~  r6 I$ k0 `使用DSP侧单独调试功能,验证动态申请没有问题,
+ D$ A/ G/ Q# E& O9 ]9 S
  N( v3 b* I/ x3 |$ ^' i但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! c) H: S1 p; [' M: c

' z( o) M! R. f: d) I, q4 N# B  f8 J9 p# h9 h
: M2 S! B" _$ p7 K! L( l8 N
5 d+ I- O( W4 i' N' x. n
0 D3 S6 o( x) @9 H5 R3 h" C9 |

2 O$ a5 g1 K& X" V3 |0 H4 M" J' j2 P3 s4 ~* e% f% d

- I' S$ r! a( A. W# l1 H' J  l" y0 g! [" O. n. d

+ \& _4 q. M0 c
分享到:  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 */
+ ?$ G: s0 G- l0 t3 @5 D" XProgram.heap = 0;
. n8 Y* _- S% ~0 J. j( \8 Q1 y# y% tProgram.argSize = 100;  /* minimum size */
/ B! G' `8 c! @5 T$ W" ~+ \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 V" Q5 B, F0 c; ?4 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 X0 ^" J$ X% K7 U3 z
var heapMemParams = new HeapMem.Params();
2 S# ]4 h, u/ X# H; D' GheapMemParams.size = 0x4000;
+ u: ?9 U; O$ T: p* u- f/ k2 [4 r! g; W
var Memory = xdc.useModule('xdc.runtime.Memory');
, R' E+ X/ P* V+ nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ {& h/ a( N+ |; E( \3 y1 V! J6 G
) A3 U5 M( U( I5 ?
我大约calloc  每次共计大小为5K*16bits,4 C; t( d6 {! W( F6 j8 ^3 M& ^6 Z
而默认配置才0x4000、需要改大。
) ?0 r8 x9 {4 o7 x% ~3 P' L& z1 S1 I3 ~9 l, Z, ?1 s4 M
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明3 W/ V! I( Z) {5 R4 d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 s5 [) I' H' g. f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' m* b4 N1 U* \
6 q' e, W- h) x2 z; j
是不是需要在DSP.CFG中进行配置0 d% C! N0 _! e- q/ e  X- `
我现在的配置为
* H# M- \- S2 c3 V0 C, X8 Y9 ~- l9 S+ P4 k9 m
/*
* X6 q4 e, J  F7 E, d5 S* _6 S *  ======== Operating System Configuration ========3 P) H! G0 N% r7 @
*/, v) e1 O9 j. L' B

4 g. F, u+ M0 q/ b7 i# |9 F/* no rts heap */
5 f. j4 \2 m  L  P6 KProgram.heap = 0;. O5 p( Y6 q4 X4 A4 k, X
Program.argSize = 100;  /* minimum size */4 I" J' B2 n/ t0 y! A4 ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- {1 [; p& H4 g4 [! L

& w  {+ ?& v% v2 b; O/* create a default heap */. m, g4 K0 ]: t9 D' V+ @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# X* ^$ f; Q' y# z/ D
var heapMemParams = new HeapMem.Params();6 r8 |1 d$ A" N; Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: c  T. `, O+ ~, N
! ]5 d! @- Z, G& Y
var Memory = xdc.useModule('xdc.runtime.Memory');
2 B4 ]) a5 ?+ {" S' }$ VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* M$ X" X6 N9 G; |5 c

$ q3 }; ?4 I8 S$ e/* configure System module */% m1 Q/ h: u3 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 K3 H: I9 Z+ |/ m  TSysMin.bufSize = 0x1000;
' Y( R% h4 q1 s, y% \- a8 ?5 bSysMin.flushAtExit = false;
  R5 _9 a' P* s# ~0 y0 M; U! G1 E' L1 n) ?
var System = xdc.useModule('xdc.runtime.System');
5 N# m/ ], @' D, N' f0 p( MSystem.SupportProxy = SysMin;
3 R! j: r8 w3 I5 `! P( X+ S8 o6 x6 e5 p) e1 A
/* configure SysBios to use the lower half of Timer 1 *// [& S- @3 w6 P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" I: ?$ B4 `$ \- N' B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 l$ g' O: A, k; e9 n& w+ P! ~4 ^Timer.timerSettings[1].master = true;
+ m5 p+ S9 C) E  Y& O: ETimer.defaultHalf = Timer.Half_LOWER;
; o9 {; N9 {2 S4 _; ZClock.timerId = 1;* V& \+ g% v0 N
+ |3 b0 J3 |. f* E( |" V% s
# g2 G3 a4 Y2 {' _' ]
/*! I+ n9 H) i6 K* E) N
*  ======== Miscellaneous Configuration ========* K4 S8 [" `. {! v
*/
$ I6 h! r; }) K
0 k' L9 _8 T* R( I- A2 E4 J/* set default diags mask */, N' Z0 B7 A% C) f( ]2 }: X# O
var Diags = xdc.useModule('xdc.runtime.Diags');
8 U' y5 |6 q6 A, p% ]var Defaults = xdc.useModule('xdc.runtime.Defaults');2 {, Z$ W7 H, V) G
  z. X& I7 P2 Q# t. x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! N( \7 ]/ @6 ]
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 ]$ V6 ], V9 ]! Q5 MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 Z9 R! t: P" z# W3 e* r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 c& p# H& h9 E  R- N% LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 S. o1 t, s* G" MDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- u2 r& O/ q# d* c; bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ g; ^; t9 k9 v0 \( J' g6 q" B$ T4 \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 Y& @8 G2 @* a8 z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; x8 y* c! i/ _" x) A: [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& u  X  c7 u9 O$ W4 G. ?+ M( G; j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" t4 [3 O& y. \# h. |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 N/ w) }6 o0 j( V0 I* U# w: X, L: J* DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, P( r9 {6 w6 _% M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 R% W8 o% q* G" w
7 q8 @1 x$ H) R" Z
/* override diags mask for selected modules */4 v+ e3 }# _( s/ z% s
xdc.useModule('xdc.runtime.Main');
) G) g0 c6 a5 }, B6 _' u+ WDiags.setMaskMeta(
# v2 {. I: W# T3 k9 H& `    "xdc.runtime.Main",0 R* M7 S& a# _. u1 c5 t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 f  i7 G# \/ y; m# b* U' J) m: m
    Diags.RUNTIME_ON
0 a2 N+ T" }" |8 p. ~( \);. ?; i) R6 `2 X& z

4 _( ]4 y, d* @& tvar Registry = xdc.useModule('xdc.runtime.Registry');# ^: @( r/ @0 n0 F3 g* w5 B" |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) _) H, `" _0 u5 b$ B2 [: K5 {5 q) a
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ ?' I$ T# B1 m* M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' w7 U% [( T5 D! M1 kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  X$ b* d, w! ]$ Z) R" r0 b
& Z: R. o/ z- V5 p& i4 E
/* create a logger instance */
7 ]3 e# I: C6 }. ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% |, t- O1 c- W9 B! ]8 l+ g5 f! r0 vvar loggerBufP = new LoggerBuf.Params();: s4 l5 [( K4 O/ F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% I0 m: H" q  ?" }7 V& d2 L5 \" AloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 M7 h1 S8 k- X6 _8 N' F, P
  U! {3 s: c) r) B# U& k" A
var appLogger = LoggerBuf.create(loggerBufP);
2 A; n4 J" J7 s3 ^appLogger.instance.name = "AppLog_Core1";
4 w4 E  X. @* d6 M+ X, RDefaults.common$.logger = appLogger;
. Z: ^* a: `+ t# a# QMemory.defaultHeapSize = 0x8192;   
& |9 o( c7 a( N* s1 S# sIdle.idleFxns[0] = "&LEDStatus";
: R4 y" \. {1 ?& @/ K8 F+ E! YCache.initSize.l2Size = Cache.L2Size_32K;
/ i, B7 r: ^8 T1 c9 s$ S6 A6 I* h' {3 L$ y0 K
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 07:50 , Processed in 0.041521 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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