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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, ]" h3 \$ ~1 B1 W+ E. X
  K  N; V1 r9 e& Z5 @3 o: P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. M* E. v6 F7 @; h5 W; v) V. J0 e' q7 x
其他程序段。。。。。! w5 A7 P3 k1 d) B6 Z! `& _
% p! H3 ]6 J* e9 E' {) F+ Q
   free(x_d);
. L% k: i7 S' o
: Y# B$ o3 o; t, n7 z使用DSP侧单独调试功能,验证动态申请没有问题,
! z- s  l9 a4 D: B! x  x" w: x: D- N8 W, l; {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' R4 Z' Y+ J! s* n5 k

5 q" ?& Y( v2 d' X7 l& X4 N0 F
2 |6 T5 p! |% z4 A
% k& D" m' u9 K' ^* D! J5 E+ {! Z3 {& Y

3 y7 l. n3 H9 n4 z9 j0 }7 M0 s- i9 P3 ~0 I' `

; }* p& p( H: E$ E. D. }5 {6 y
2 _/ S9 w7 q. w4 ~  S. g# n
: f9 F  g5 l, Q# V* D0 p" w* ]( D
( @6 C2 K% S* I6 u7 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 s7 d. Y7 n& L5 G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) ]- z7 @% q( \% T. z) P2 n1 |1 f/ C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- B. c% p$ D& _9 i( u6 n

' r8 y7 q: w) H1 ]是不是需要在DSP.CFG中进行配置
# o' |' G) K3 k2 ]+ N" T) N我现在的配置为' {" b7 a% N9 K% w
3 [) H: f/ _3 p( G; {
/*- a: z" F, ~% E* U
*  ======== Operating System Configuration ========
. F- T2 r  x$ _7 x2 j; c) c */
6 V' z4 I+ Q. l( v& J% i/ H9 ?# p( }2 v
/* no rts heap */- V! g2 z6 y6 ^. A
Program.heap = 0;
3 i9 R6 M+ g7 q# u9 uProgram.argSize = 100;  /* minimum size */
0 k% x+ b2 r) a! q; K+ R6 i/ YProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 y! E- f- M/ `; L( _: X$ [

8 G0 k( R- U; r- b# v/* create a default heap */+ i) k: Z( k! v9 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 u: R6 j! [+ u, V$ J& g* Yvar heapMemParams = new HeapMem.Params();
( U! `3 {' t: P+ T# i- ~* Y, T+ LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ |2 K4 ^! \4 @7 U& l$ P

+ v7 l- D4 m/ Q4 x
var Memory = xdc.useModule('xdc.runtime.Memory');+ f. \! M# a- X2 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- `% y3 L: _* i2 q
+ q& y2 A4 ^) k. |. Y* a
/* configure System module */
8 M9 {0 C3 q6 B! M/ R4 Avar SysMin = xdc.useModule('xdc.runtime.SysMin');8 j0 L5 J# K% B% B2 L
SysMin.bufSize = 0x1000;
6 ]; v) c. r; q# }4 k- YSysMin.flushAtExit = false;
1 z8 T6 J* D! a2 E' m* q5 S! ~
/ s) I7 ]/ _$ ]; C' t  I, L5 [2 Ivar System = xdc.useModule('xdc.runtime.System');
8 _& k6 _# p$ b8 }System.SupportProxy = SysMin;
; D: u- K2 s$ B6 u) n+ o5 t! S4 Z5 x( z) Q- G! O/ q
/* configure SysBios to use the lower half of Timer 1 */
" ^) E: U$ ~7 Dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" a* f" Z6 t2 E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 _" r' s" [% x. E0 G; ]' i/ M. hTimer.timerSettings[1].master = true;
# H, h5 ^9 P5 z. FTimer.defaultHalf = Timer.Half_LOWER;
, E3 s$ E' a: u: I& jClock.timerId = 1;
5 i! H5 Z. {% A2 W) U0 g
) f; D: S' T' W. Q- B7 W) B$ P# Z$ O- L8 }
/*1 F( I. d1 W& J, R
*  ======== Miscellaneous Configuration ========3 L1 h8 q$ _' ~$ R5 r% [( s) y
*/
& n# c3 j% \  D1 G0 {
7 t  _& i% U# D/ b; T( S) ]/* set default diags mask */
" c$ T/ l4 e1 `9 |$ e6 Ivar Diags = xdc.useModule('xdc.runtime.Diags');
  x5 _% r2 @% A- D9 lvar Defaults = xdc.useModule('xdc.runtime.Defaults');- i" L1 q) f/ x8 A
1 m( R! _8 N; ~" h4 J
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 l- S1 t; {3 a. P* a+ c9 V& ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 d- ?, W9 m& `' ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ k# Z6 a7 j* m; |0 Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 u' y. k8 b; f, ]' u; WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  I# ]- i+ w; D" {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: ^) I3 T+ |% ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& s3 @5 L" }0 G' Q- U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ _. Y6 V# a& R& W8 r# L/ PDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( B5 \) ~2 B% g0 w8 ]! EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 p: Y4 I& O( B1 p% A4 U! BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 E" E  K0 T* r# RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  D" F3 `2 v3 G& hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ O. ^8 y$ D  y' n, [. k( a
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 j$ Y/ U+ ~- x& y3 m

# n( d* Z4 L5 n" W! f/* override diags mask for selected modules */, X' q% e3 x, \  h9 O6 k4 a2 T
xdc.useModule('xdc.runtime.Main');' {4 J2 }5 B% C
Diags.setMaskMeta(- z# N3 P0 v0 e
    "xdc.runtime.Main",) Q. H7 r  c; c; G( ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  E: a9 r" O$ [- f- f% X    Diags.RUNTIME_ON, T+ F( E0 s6 K; Q" r
);9 W! n1 S' i2 v% A6 F& Y' S% ~
0 {2 U- K% h6 t2 `
var Registry = xdc.useModule('xdc.runtime.Registry');# C+ H+ a: f0 Z  K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' n( t$ A8 b' ~" @0 X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) ^9 m( J& j) o% u. }# oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# r$ U( z2 w4 @" n4 y4 q  Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& o! S) C& t/ H
/ n' F! m: b5 W6 W  |/ g
/* create a logger instance */5 U9 U/ t' H; Z! n# b3 `, {2 V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 ?$ i0 M9 Q8 d4 Cvar loggerBufP = new LoggerBuf.Params();: T& b9 O$ U) Z# v# |- w. O: d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- e! R/ i/ S: }$ v) d* V5 RloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ K* w1 j: j1 |+ G

- z2 @0 o5 x. }8 u3 @8 \4 Avar appLogger = LoggerBuf.create(loggerBufP);" |/ w. D% `" m+ n$ w
appLogger.instance.name = "AppLog_Core1";9 V0 ^6 s6 l3 m- e
Defaults.common$.logger = appLogger;: F  X1 ]6 @4 y$ R9 s5 }
Memory.defaultHeapSize = 0x8192;    1 A/ g/ F5 l0 R8 V2 x
Idle.idleFxns[0] = "&LEDStatus";  F8 {# H1 \$ s7 g
Cache.initSize.l2Size = Cache.L2Size_32K;! z1 b& y, k: ^; I+ w

) d& \; f3 s5 |5 H8 d0 k/ x
回复 支持 反对

使用道具 举报

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 */
! m3 m  j- w: @3 ^3 w) nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" j& H9 C1 K6 ]( j: T# u: [5 Y
var heapMemParams = new HeapMem.Params();; M5 T4 G5 k6 @/ Y1 p
heapMemParams.size = 0x4000;: Z7 |; K/ |5 ?3 w# T

3 G2 o0 n% n6 Z5 D# F2 r' [: P0 f" Ovar Memory = xdc.useModule('xdc.runtime.Memory');
  q4 I/ e1 }2 j5 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; `; F6 {2 q" c( D; T- H9 T: P* A+ p7 G* ~
我大约calloc  每次共计大小为5K*16bits,6 \! E+ r' w# R/ _! p2 m3 G: ?- u
而默认配置才0x4000、需要改大。8 N+ p8 w9 u4 I; x. n

+ ~, V2 U4 X; n) J% W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. q# @& w; F) u! W+ yProgram.heap = 0;, }8 S& a. b7 s, r) u
Program.argSize = 100;  /* minimum size */8 M% O, c" t" L. i! s9 j" D9 D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 18:05 , Processed in 0.101728 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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