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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' O. E. `$ r5 S- g1 T0 U+ o) q( P$ ^% w1 i5 h: n5 q) }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# B4 y9 N) n  N  x+ e+ O  P  {4 H0 C# e) i' F
其他程序段。。。。。
+ x7 G) d7 J: J" P: M0 L
: ~+ }8 x$ i- ]: w! i   free(x_d);0 @5 M) ^% w* N& c/ K% E9 ]8 }+ Y

$ s( m# ?6 S$ G1 Z! H5 U使用DSP侧单独调试功能,验证动态申请没有问题,7 |  M0 i: D, t" v0 Z
7 ^+ z7 ^6 H' Z( G' w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% C" t: K* H# ?. u6 H% ?

0 u* q$ S, J' G
, i  _1 I2 C7 S* R2 M
9 [  Y( \+ O. M1 ]6 b8 L# X# U1 b0 j+ E6 ]

( f; M: k% X1 q8 l5 q5 J; _
7 O0 Y( k0 C9 ?$ V( r
2 b) j7 d' J1 y- t
+ G# S- @9 _5 ^8 h, j5 F' W" o5 G0 d$ t7 t

, o7 c2 F) E- j' p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 `: X1 z5 Y% ~, g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 b! S" t' |- Q5 k! g7 Z" q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 t" N1 W# s  i- a, v# N
; i; z1 i# c& C# g: S
是不是需要在DSP.CFG中进行配置
" ~# o4 N# u( A. r8 y我现在的配置为( O/ u$ v7 \& [9 f  x
/ T' O1 `1 x2 N' J/ Q# I$ H7 \, Z
/*
  |2 Z1 C+ ~3 J6 B# `4 i6 f: R *  ======== Operating System Configuration ========
" L: G9 Y, ~: z2 g9 c( b */
* r  C  x9 E7 u
5 t  [  K6 S4 @6 Y' U% D/* no rts heap */
2 O+ Y) Z* ]/ @8 b9 a9 A% c4 c& PProgram.heap = 0;
; |! n- E3 `/ v+ YProgram.argSize = 100;  /* minimum size */
1 ?" x3 [. j6 N1 B9 y; RProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; w; i3 o1 q( E! h6 K/ v. e

* y1 D0 l$ S9 a7 @/* create a default heap */
- K. g+ X$ K& D6 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' s' H& }7 x, _) @1 ^3 Zvar heapMemParams = new HeapMem.Params();* W: B  n/ s- f6 g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- S6 F& J+ A$ Y
! g2 Y' i# T: K/ ~
var Memory = xdc.useModule('xdc.runtime.Memory');
' U+ B- }$ i" A6 A* `! _% e0 Y) fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- D1 u* x9 f0 F9 t% U1 Q, o* k) S
3 w2 B) j6 }* ?- ^' @; l
/* configure System module */
# C5 F, }/ y- T) Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
  L: y; \0 P9 E5 a3 nSysMin.bufSize = 0x1000;  ?' q4 k) C5 v; y& p1 m
SysMin.flushAtExit = false;( Y) y3 C; |: M- r& `) i" Z

2 C3 M2 {4 _1 z8 A, N+ nvar System = xdc.useModule('xdc.runtime.System');
5 y0 N+ K9 _; u- f9 nSystem.SupportProxy = SysMin;
! r5 @  l( U" F- \' P6 c  p& P6 w$ V- ]
/* configure SysBios to use the lower half of Timer 1 */
* E, ]9 G: `! a8 Q0 o2 ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ `4 U- p# U# N, D7 Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: W& x  [1 ^5 ]7 j- P* U9 U
Timer.timerSettings[1].master = true;# e: p& ]( Q$ ~
Timer.defaultHalf = Timer.Half_LOWER;9 x# a0 b; s, l7 P1 ]) ]
Clock.timerId = 1;
. t/ U$ f5 A# h9 J' m) O$ p+ P, \* U8 [& M+ P) k4 B& |) V
' g# _8 l$ |; P) Z8 H
/*
2 \) @% n1 Q$ P; z7 p9 U *  ======== Miscellaneous Configuration ========
0 H" R2 f$ E0 }8 I' h) m */
1 v$ u9 ?/ Q) _  B5 }
  |9 O( w  Y) L. C; f- H2 G/* set default diags mask */
/ V' }9 ^7 s$ f; Yvar Diags = xdc.useModule('xdc.runtime.Diags');' C* w" z3 ~- t  L6 E, j
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ Q# P' _& g; I$ h$ t, b: C' ?
. C# t* c5 M4 N0 W0 }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! y! B: e) g2 j( p' @8 \9 q& j) H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ [$ i1 j. T  U/ i( jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 `# ?1 k8 A  _2 Q! K: l# ]% j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 [" t; P8 g0 k: ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! r, O: v5 I$ Z: m/ b( G/ XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 n! r/ \' N3 g5 b, P' y3 J
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 |" b& u- u  ^0 u1 c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 R2 j& {% S7 J' V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% E! ?$ M" p) |. jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ ]* u+ z7 i* u5 y6 M. n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 C+ v' @9 D1 `. ]9 S$ m; O6 j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 k% v7 J/ F9 Z  W0 b) \; cDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 I/ ^3 R! y1 X  A. D( r) |$ W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ l7 p& \& R* Z% p8 |, Z- M, ^0 _9 r- z" ^. b
/* override diags mask for selected modules */- G2 L& r5 M! l/ w! [& G* |
xdc.useModule('xdc.runtime.Main');! ^7 |5 q$ t  P5 r/ |) H$ t; D1 ?4 Q
Diags.setMaskMeta(
% |1 E5 y1 D, z8 K- W; d( N    "xdc.runtime.Main",
$ L' K/ b: J1 k* h3 \) x- {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: U- b5 O# W9 V- k* u, Y- v# U    Diags.RUNTIME_ON
; v- Q4 b  F7 p0 y);
+ a  H" x4 m. ^+ ^+ ?9 w
0 M/ y1 \' _% s; Y4 {/ T5 evar Registry = xdc.useModule('xdc.runtime.Registry');. a1 U' D0 ]. A* }8 G4 n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ D- Z9 F2 m1 H6 ?7 i2 t/ G, V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ |9 `. C; t& h8 H* o6 E* s7 [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- E  h5 w( _  u  oRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( L7 Q2 C2 e) |7 J9 i2 D6 g/ G- H8 ?1 q2 _3 m0 I" D% s' g/ V
/* create a logger instance */6 [6 {) G! w9 w9 @6 X
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# H7 [/ S3 S) O/ C& a
var loggerBufP = new LoggerBuf.Params();" |3 ~% e7 G( p4 b% c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 l3 T5 _0 U/ V+ {- U$ ~
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 S1 p2 K' |/ h0 u
# S3 ~5 d: q- e; G& v0 W# D1 H0 H
var appLogger = LoggerBuf.create(loggerBufP);* p% B0 y4 Y5 R- K( R3 E- c, |
appLogger.instance.name = "AppLog_Core1";
; f  P( {6 W5 _0 ~" ]+ jDefaults.common$.logger = appLogger;
9 Q! h0 v6 {$ T6 A' }0 A6 s' K& rMemory.defaultHeapSize = 0x8192;   
" U5 e+ [' \6 ~* [) g  XIdle.idleFxns[0] = "&LEDStatus";1 W1 _6 T" F* K; _" D' j4 s
Cache.initSize.l2Size = Cache.L2Size_32K;
  N- B" D) L9 [  x2 l4 U& a7 v' G  n" w9 J5 @8 ^" P' 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 */* {' L3 q. d# U' E# A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- `( N& b8 l5 @7 m8 I' _
var heapMemParams = new HeapMem.Params();
. V8 e1 u- J0 k. O! S% DheapMemParams.size = 0x4000;6 _* \9 G2 Z0 y5 j% a

( _, m% n9 E  z1 K- E# bvar Memory = xdc.useModule('xdc.runtime.Memory');
( U/ H( u. S% R& HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% v! f- k0 M8 Z5 P+ l- D
% L, F6 I0 x: L2 X: o9 c& W) l
我大约calloc  每次共计大小为5K*16bits,/ `" C" N) V' N9 S9 j/ S3 I* J
而默认配置才0x4000、需要改大。! m' V) p  G* q

, z: H4 \7 k% i, D" v6 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- @3 a$ {/ ]  r, C4 lProgram.heap = 0;$ l( b( R$ x8 _
Program.argSize = 100;  /* minimum size */$ k" r$ m  N  r7 a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 01:39 , Processed in 0.042649 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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