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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  Q. Z. o& h5 p9 P' R: t, c5 K# J" c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. n, O0 s% R) }$ z6 Z/ T$ p4 N9 \7 r
- i6 _4 C3 s5 j
其他程序段。。。。。
5 _& p( O9 L8 H' j' e) H & X1 R$ P- d& r: i* M
   free(x_d);" h  s6 f& E$ v4 c- O! G' M

7 L' ?. r8 z+ G# T使用DSP侧单独调试功能,验证动态申请没有问题,
! z9 N% T% E- J( ?/ C3 N& Y+ Q' M& w1 @, o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  W- G. p9 t( R+ h9 t

8 ]: ]& x" w* a
7 ^" J# ]5 [% g, Y
7 r( Z! b! e- ?3 P$ T* n! u4 X& t2 g" {

$ G9 ^' l# i8 R' P% Q' t# r% f" x/ {" {1 }( b  v
$ z4 G. T$ p/ ]
' E2 e, y2 v. U  b- A, M2 R% x

$ c8 s4 V- E& g% a5 i$ |5 r5 q8 R5 p9 Y+ n% i( O
分享到:  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 */' B8 l; D& G  L# B9 n
Program.heap = 0;/ L9 l2 A% l' _2 [/ s3 g
Program.argSize = 100;  /* minimum size */, `* t  [" W+ u& Y" a7 J  A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
0 i5 C* o8 b) k' w; {3 M" h5 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' W# L9 }( S, W1 Rvar heapMemParams = new HeapMem.Params();
( _" Q) K2 `) y( K* b$ }heapMemParams.size = 0x4000;5 D) h4 @* W9 m7 i8 j7 ~

: i4 S" E/ j) p( l6 Hvar Memory = xdc.useModule('xdc.runtime.Memory');
  M0 u- H: T) F$ bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 h- S* h  Z( z3 \0 p
4 l% k! _" A; A* `5 o, ?我大约calloc  每次共计大小为5K*16bits,! J) C8 \6 P9 Y* ~8 x: r8 N  t. a  C
而默认配置才0x4000、需要改大。7 O) k  B; h/ C5 t7 P3 `. W' ?

4 S! Q4 O- b( i* p: p& Z" b0 C
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
; S1 W* ]: [5 ]4 D" V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 }+ X3 g! x$ i7 T0 i* w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 X9 n+ [. N, L1 O

8 l0 |6 R6 E* s是不是需要在DSP.CFG中进行配置
( s  }  V6 [) M, h3 B5 b( x7 b我现在的配置为
4 z' g9 S7 E- Y" j& \7 r
' h- B( s, ?3 p% z: F# f/*
& d/ n7 w+ M' K! D) w. { *  ======== Operating System Configuration ========
5 P4 j7 Y- @# r% o* l. v */
+ ]/ G* O6 Q# h! H0 l) j/ r! i3 F
. p( Q" O+ m' F( J( e/* no rts heap */2 j/ Q; O$ W* ~8 n
Program.heap = 0;
$ c( P& s( z; eProgram.argSize = 100;  /* minimum size */( X  y% W/ w2 `: ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" b  Y9 `! y7 d0 b. H. l& X3 ]
" O$ f5 t) f; ?; Z
/* create a default heap */
+ W0 J& C- ^4 @4 R9 t) h2 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( w# n+ `: i5 q/ vvar heapMemParams = new HeapMem.Params();6 [9 z, b5 J- K* ~  H5 r1 w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( t' O# a4 B( u: w
. ^% O- [0 G& E( ]7 s9 l
var Memory = xdc.useModule('xdc.runtime.Memory');
* w1 i" a/ H! B; f! eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- R/ b) n# j" X# I  T5 L0 }
# I( p+ k9 r, x% P: Y/* configure System module */" i  x% ~5 o& G- H" L: b. C1 B8 u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* i# r; h  r8 z3 ?. I3 N7 ]SysMin.bufSize = 0x1000;5 w& l) e; Z- D
SysMin.flushAtExit = false;3 d1 K7 \: ?0 j9 z7 C) S) r
% }6 @4 w; f0 a0 n+ o7 I
var System = xdc.useModule('xdc.runtime.System');
" s. U. A' |2 }. O) D6 b" LSystem.SupportProxy = SysMin;
, |, k$ Q# F! |' A# ^: V; q
9 n( G1 |7 b4 N3 x* d+ S( q/* configure SysBios to use the lower half of Timer 1 */  h1 _) r- m8 U5 D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% ^' Z6 n) Y" }% Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( T$ }$ x' m* W* E# C7 l$ r
Timer.timerSettings[1].master = true;) C% m' ?  U4 n: I
Timer.defaultHalf = Timer.Half_LOWER;. I: y) P! }# }% C
Clock.timerId = 1;6 B' L  [9 q& ?
2 k0 I: x* f8 T2 Z
, i# j6 D! N: j9 E- J0 x2 A$ S
/*
! t$ w' x3 q7 u9 _2 @7 I- e3 I *  ======== Miscellaneous Configuration ========
0 l6 Y; L! U# p2 e */
- t5 O; ~% A# |+ f" t& d' J9 A3 p/ @! K
/* set default diags mask */* M# [% d- |& o
var Diags = xdc.useModule('xdc.runtime.Diags');
; K; t# m7 W9 t& N* Y# jvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 _1 R  d- \6 S2 J- L' Z; ~- m

/ R* `5 y7 E! @: F, l$ F5 V3 X; E% F  x6 lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 T& O# C* q: @3 X# R8 R
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 U3 }! n, D, {- G/ X( Z8 NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 o4 s* ]7 J% [+ ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( F* c5 h9 p& E2 E. ^1 GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 Y& e. t! J6 d: Y9 x0 Z2 m3 J& TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& S" _* h+ P- }' T* g9 J) T3 t) ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! \1 n8 {/ v) X( e0 ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* m& e; Q& ^; \; q2 _$ s, mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 H8 x7 ~* J5 G& t7 {$ Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 v3 l# z9 \: i* g! z; Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 m8 c" x& p: ~1 [) m5 B$ A% k7 Q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 O, ~# `2 n; V
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) ]+ n+ T6 Q' S# h' i( M3 T: H" V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 u+ k! z' F3 D: O( k
, |9 D% U& V4 |- S/* override diags mask for selected modules */5 o, w. a3 y6 F# T
xdc.useModule('xdc.runtime.Main');
& z6 N8 j4 d2 L0 q, O5 ^Diags.setMaskMeta(. k! s; Z! M, K; N) y% i
    "xdc.runtime.Main",
5 |2 N9 {. x) _% Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,; F  C! g6 y; i+ T
    Diags.RUNTIME_ON/ l; B# D' I8 t9 E$ w
);
6 M; \; M% R! [. }8 k, e
. _  m+ D8 Q& \1 i. Zvar Registry = xdc.useModule('xdc.runtime.Registry');
* N7 A4 _# g( ^: s' u( A' ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 M# Z8 M3 P# Z3 T' |, h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 _3 Q0 U. l* o, E# @: d
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# v$ i* F6 C2 s, B! e. H7 L0 v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: T' T, U$ o: b& U- r" B1 n$ a- D! B6 w3 l1 U4 A
/* create a logger instance */
6 r9 F- w+ W" l, B* B4 wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ T) Z5 x) _4 Lvar loggerBufP = new LoggerBuf.Params();
' \4 f  f; c9 _9 V0 H9 W/ y9 ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 s: X- E/ y' F7 D2 F# a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; G3 R  e9 E! c; g# `
3 i, R3 ?8 i* C. qvar appLogger = LoggerBuf.create(loggerBufP);
# z4 a- l$ f5 \9 p0 qappLogger.instance.name = "AppLog_Core1";
0 J; O6 T0 A: i  cDefaults.common$.logger = appLogger;  T6 @/ Z# g+ {$ C9 E
Memory.defaultHeapSize = 0x8192;   
+ [6 h0 X; k, a  @7 R' [Idle.idleFxns[0] = "&LEDStatus";; y* `4 e# k* J) X
Cache.initSize.l2Size = Cache.L2Size_32K;$ n7 P) s0 E% X7 }. p7 |) \
0 v7 q  V8 L' ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 13:06 , Processed in 0.044310 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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