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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ c8 R& T$ U& }) a4 C; H
! M0 M7 ~" s* V    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- S( b0 H+ v' @
2 h- U! g, w4 u2 A
其他程序段。。。。。
9 `5 @1 @; [, N8 y& `
7 r7 |& f/ _. N9 f2 t# S8 M6 S   free(x_d);+ O. E6 d) O) @- J, P, c  }7 b: m

" e' `" Y% T% P  K; j使用DSP侧单独调试功能,验证动态申请没有问题,
6 D. {  o5 A" g% E; C5 H) J
! u/ d) Q' m9 q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ o% d+ C. D5 o+ x* `/ Z
9 J; j; w6 P# n& O

$ X# f3 t6 e1 Z3 @% X$ Y# L
: s9 {$ J4 K  r2 H/ x7 f4 \' Y1 f/ `2 ]/ x
& N  z) E( _1 N. j* K
1 X' L: W- Y0 g; E* i

; {3 P3 C) c$ g+ H( g1 {  O9 S: x" X+ e4 a
1 I2 ]! o1 w3 `; B. ^. b! i

5 X4 R$ s2 Y  l8 X# ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 g) G; w9 j- G) y& K, J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 K! o9 Y& G1 K0 ]$ w* |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 ~9 L' ?/ ~3 W1 i: G: }. \. ]  V+ I
" Y$ S  b( h. r' o: M: D
是不是需要在DSP.CFG中进行配置* G9 k, H# g' l3 m1 k2 b& ~7 X  r* a4 N
我现在的配置为
( y! h1 I& Q5 H* _( q
9 L9 v6 \$ u8 @/*
) Z9 Q& d( |! O6 M0 b' p: x) f *  ======== Operating System Configuration ========
# T2 H" Z* f$ C% J* u/ ^7 ~. n$ y */- c( K* M4 |% R, a" F$ j6 w
# Q% ?9 v) L) S- j+ I% L( v  H
/* no rts heap */
  l' J9 _# i1 l4 [6 ~4 r& pProgram.heap = 0;
7 g, U6 d8 P4 V9 x+ v& O, l: i( yProgram.argSize = 100;  /* minimum size */% U  S! P# I7 [7 L0 e8 g! I8 T0 q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ M5 n; }, z; A  y

! f1 h3 `; G$ \, W2 r" s% T5 W( P/* create a default heap */3 o& c3 R+ t/ ^4 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 u  G9 h% {5 F* }# Y% d- `2 X% R5 uvar heapMemParams = new HeapMem.Params();: ^6 k' y( [* @9 \7 j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ W' U, M/ j" X6 i3 ?

/ `# c5 q& H+ O5 w
var Memory = xdc.useModule('xdc.runtime.Memory');
3 K/ t1 s' K( I9 C' u6 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- u# i' y7 E6 b0 z* z; W; F: |  C$ ?5 K2 J
/* configure System module */
. q" H0 _' A8 W. B$ qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
) t! i; g) O/ O/ ~2 H$ s/ mSysMin.bufSize = 0x1000;" a# ?. y' _4 }, M$ D6 C
SysMin.flushAtExit = false;
9 u9 o/ v  M! Y2 |  @2 @1 z! N$ t9 Y0 j
var System = xdc.useModule('xdc.runtime.System');
( F/ C% D) N( s5 X1 N  u7 g; ~8 qSystem.SupportProxy = SysMin;
; X8 U& i4 B2 o7 T3 S5 D+ m, e: J% j8 o" z" h& ^
/* configure SysBios to use the lower half of Timer 1 */
$ l* Z) Y+ k# y9 {0 l) o- Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ u1 f/ A6 Y* u6 G* W+ ?" W  B  |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  I, }0 F7 k- X1 |9 j! c5 pTimer.timerSettings[1].master = true;
; h: F' _& C9 q/ [Timer.defaultHalf = Timer.Half_LOWER;
( a/ O& S. r7 U" J* R2 eClock.timerId = 1;
' j7 w/ `+ F  w6 ^' _; F' l
4 R5 ?% x2 [& A. w& `. {$ S9 l( ^. H4 E' m- E' @
/*/ w' w+ A7 l9 c3 Q. [
*  ======== Miscellaneous Configuration ========) w* i5 J3 e* C  u0 K5 t
*/
3 `5 |( V2 z& b/ Z: \% z1 `# v+ N$ v8 P4 C6 U) x+ O6 `& s8 k
/* set default diags mask */
. N5 \1 G" M. L7 @) W, bvar Diags = xdc.useModule('xdc.runtime.Diags');: w  y3 v" b" w; v: c7 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');. ~7 S+ w$ v5 N
1 G% b7 P* X3 B; m7 Z  B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" J) _- v6 S% ^4 WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" Y2 K4 _9 S" U  \5 K. S$ b1 s/ [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ ~- c4 D8 T  T# b  `8 N- cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! y: P" D3 h0 `$ i2 K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 l! h7 z0 P, Q6 [, Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 i* f( J2 }3 g% d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  @/ q. D) f: D* ?1 r) {# _Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# m3 k. D% G. M" ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! d" E  j& N/ f& N; o' K" J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. }" K9 }, h; h. IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 O* y+ p# {* h- G/ Z& F; RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) |( l9 I% [0 I; q" `" L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: k  R& H! W: F4 b& H4 Y: z& C, i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 Z# h: S1 L$ W; d3 \( a- {; ]

( M2 t3 P; l% `3 u/* override diags mask for selected modules */
$ }: z6 |! x- ~- H+ R/ X: Q7 _! Ixdc.useModule('xdc.runtime.Main');
1 l3 Z# ^; H# V. r5 cDiags.setMaskMeta(0 k/ C& n8 C2 E7 {  r$ j4 ^
    "xdc.runtime.Main",  G0 e8 e* ^" V: u, J1 B
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 ~1 N  ?) J6 d, a7 k: H" ^
    Diags.RUNTIME_ON
; e# @2 o: ^, x3 ?);7 V( m6 I8 U/ S3 S
" ~" r( f/ q0 M8 v  R
var Registry = xdc.useModule('xdc.runtime.Registry');  ^9 c2 d8 I7 X  A" w  \# n& f% A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& p7 M$ _4 C1 C" V- a! E3 p4 \) ARegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 {7 u9 C2 P; k2 J6 _; Z2 w4 t& `- e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: B% h. i) e" BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- D" J" F6 T8 ]& D0 y2 n) l! `0 \0 |, A0 a6 M5 \, ?
/* create a logger instance */* G% V" D: ^* ]$ \, z; k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, E. Q. J. L7 N! y: W- n+ V
var loggerBufP = new LoggerBuf.Params();" j) i$ C3 D# o+ U5 u6 W9 J2 H" Y/ p
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" E( |7 Z- s. u* H- g3 c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" G& d  [8 ]. c3 V6 @: M

* Z2 h+ n1 b% P/ g1 J4 Uvar appLogger = LoggerBuf.create(loggerBufP);
5 Q. X5 M" n: `' P+ xappLogger.instance.name = "AppLog_Core1";4 R2 @4 i/ F# H1 u- }+ d5 S* D
Defaults.common$.logger = appLogger;
& V; L- o, ^: Y# l6 s! X6 rMemory.defaultHeapSize = 0x8192;    3 n* w  o1 _8 Y
Idle.idleFxns[0] = "&LEDStatus";
" I( z7 E% ~7 `' rCache.initSize.l2Size = Cache.L2Size_32K;
4 Y. ]1 d' \( a( z9 G
; G7 v4 ^1 f2 L  ^* k. B: {
回复 支持 反对

使用道具 举报

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 */- T1 R3 Y) k5 e" a' R$ l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' d; [  J" r8 E: n/ X2 ]
var heapMemParams = new HeapMem.Params();
2 P# I6 o/ [3 Y7 u" x% d, PheapMemParams.size = 0x4000;3 N  L$ q, x3 I2 {8 t" h

6 b0 T1 `- B9 u$ c( fvar Memory = xdc.useModule('xdc.runtime.Memory');
$ M- |8 {% J0 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* N( ]& S5 x7 x  ?. ]! N$ S1 l3 I+ [  s; ]/ v7 a% K
我大约calloc  每次共计大小为5K*16bits,3 R8 `# R: f7 \" I, D
而默认配置才0x4000、需要改大。
, Y# n! u! {$ x8 v1 }: W$ G7 f( q" l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 ^" m; i" f8 K2 q/ z# C1 TProgram.heap = 0;
1 K  |; N- V7 _4 i  s  l+ \6 iProgram.argSize = 100;  /* minimum size */
1 I0 ?( N' j  {4 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-10 06:22 , Processed in 0.041856 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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