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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 w; ^' q- a4 {3 t4 a7 r
1 |, ^/ `! k; x  _  o  z8 D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& I6 y4 C  r% e+ m/ h

: Y2 s4 m0 D' x1 o. d其他程序段。。。。。4 r' y# }* `2 N8 k2 R& L9 d' p

$ O" E. i7 u1 v0 `; K! J0 @$ ~   free(x_d);1 O/ \" ^0 {  t! [2 w9 |+ N

1 n8 E, [$ M: c: h  S4 `: t+ x使用DSP侧单独调试功能,验证动态申请没有问题,
# [) P5 u! D0 u; E  ]# e! ~
* t9 I+ a% Z( R$ `4 \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, R0 V! T8 L; e# l1 L2 [( \
9 w6 `- c2 m$ a, [1 y: M* @
9 u8 G, H5 T' O  u8 l

; c' d7 @7 w* [3 n: c" C( {9 n
$ ?! `8 I* d  H8 k- ~0 o6 b* A9 y
4 [$ V. A( M4 S. W8 \. q( u/ |
. D% |' k: M* c1 V( q+ ?
) G( H& c. k% c, b6 x/ x
0 j5 z" m2 T3 X+ u8 [
: O. `' S% I; S" ~* h* S( V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" M& a6 [7 q6 H2 ]- T3 i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- m% ]' U" b* ?  N5 m0 p; c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( T- l. B) Q" y5 y
% w+ N, d- l  \  @
是不是需要在DSP.CFG中进行配置
3 z; i% i1 n( g7 T+ T- h我现在的配置为
2 {' F- B; z3 d$ B' L
0 M8 g3 C; Z; B4 w! N1 V+ e/*
( _! i& _% i, x* |  ? *  ======== Operating System Configuration ========
4 \4 [/ y8 Y+ h. e5 P */
2 A) x" t& s. Z
' i. k9 h9 C6 P" W  [( `. \/* no rts heap */9 I, L+ T! |* X) ?0 K0 l6 e# E# V
Program.heap = 0;% n/ R$ ~) c/ V
Program.argSize = 100;  /* minimum size */
# Z: v& v' H3 X5 B% O5 O* ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% z, d% w: |* Z8 ]! K5 G
( k1 }/ ^/ E7 U, Q& D/* create a default heap */0 a# {( u1 u1 O" u4 k- d& i( v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 q; D. ?7 g+ A( |; s2 {% h( H1 K
var heapMemParams = new HeapMem.Params();* |. ^0 o$ m# o4 L& q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 I7 V3 N! H8 k9 g- S0 G$ }: _# V' l, N( I. e  d  K
var Memory = xdc.useModule('xdc.runtime.Memory');  J7 c: R2 T+ V+ k! L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" _2 v' l- c" ~) N( ]6 T
7 T0 J) ?3 H! j7 p  C  D+ _6 L
/* configure System module */
+ H9 i' X: Z% i1 Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ C/ p9 p3 i# [& x; T# v; n2 C
SysMin.bufSize = 0x1000;
0 q( B, D2 f. D2 v8 ?, t7 U7 pSysMin.flushAtExit = false;
/ z5 L/ x, Y% O+ f; f5 B  ^+ I. ]+ H
var System = xdc.useModule('xdc.runtime.System');  s1 a. w2 R+ f6 r
System.SupportProxy = SysMin;% T. W# P( C# z2 Z0 @8 p+ N

" O9 E2 m( G& w! @/* configure SysBios to use the lower half of Timer 1 */
2 q/ p6 h6 G1 {5 Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  x1 r3 i. @( Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
. V3 c( n2 M4 D, @! D/ D  L% eTimer.timerSettings[1].master = true;
+ M- ~1 b$ b8 `4 Q: O" Z  QTimer.defaultHalf = Timer.Half_LOWER;* M5 D9 w3 m5 D& M( v
Clock.timerId = 1;* _6 c' n. J* u" ?

* U! s$ S3 ~: v. T: Y' Q$ y1 w% M6 g) P: ]# f3 q
/*: o3 x6 Q8 H  h; Y. M
*  ======== Miscellaneous Configuration ========+ B8 U$ a8 z7 q( j+ E1 l1 }: D( y- M
*/
4 B& F  ?- D& G, |3 `( R
# d: z1 @, x2 u  U/* set default diags mask */8 E- @! r9 R8 D# ~" u
var Diags = xdc.useModule('xdc.runtime.Diags');9 e) C% Z( X* H% i1 Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');% T) M$ F0 X9 c8 w+ L% S
0 M0 Y3 L6 i/ ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 w+ h  f6 `" A* C! JDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 t4 R0 \$ K; X4 aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 u+ E! @% d. Y; [, I7 f# r+ UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; R9 p5 l6 l8 T& X8 a" u, D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 I: K5 _9 V, L) ]4 m# S" T& `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  O7 Y2 m; D' p$ Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, p1 B$ y, |9 f6 _' B" R- _  l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* l$ z# z4 t2 @! zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ A9 ]& j& K0 R( v( k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. y; D- H% O& u( C6 w6 FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! w4 N" b8 \  a* {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ m! a; V% c' b( t1 @4 h  {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. M6 i3 W# g- \
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 i1 C9 o2 O7 h8 C; c+ T( C2 i3 F: m7 a) a+ Q* C3 p- o2 X8 a
/* override diags mask for selected modules */
. l& @2 M. b) I0 p+ ]/ axdc.useModule('xdc.runtime.Main');
- _# t6 N+ _, V2 U1 g$ mDiags.setMaskMeta(( H/ o" {6 p3 ?- h
    "xdc.runtime.Main",/ j* `* _9 s3 x! Y- m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. j) J, X3 c' ^1 E0 }$ P  H. }    Diags.RUNTIME_ON
3 O$ Y+ g! C5 W4 q: K' @);
) x5 ^6 Y# d" {
1 |' c1 z  N7 y: i1 n/ z8 \var Registry = xdc.useModule('xdc.runtime.Registry');
8 l: `: R$ r; r( S2 Z" w7 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" i0 F9 a. z; r7 ~0 F! c. x  R: e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" p5 k- k7 |& G6 \* p5 g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. e9 d4 h) H6 T/ K9 p( c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" \" e& X* K1 E, p( G3 W$ K1 R+ E8 y+ X* \
/* create a logger instance */2 a6 v: c4 ~  K! M" t. S& X1 ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) Z, d/ ?/ y) g$ O( v
var loggerBufP = new LoggerBuf.Params();2 I; l  p# y" N( U; u& c7 v5 O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 _+ b/ a% ?* r$ B* Z( _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* H0 C7 A' P. i1 G; @8 z3 v
# w  U$ o! m* Y! Xvar appLogger = LoggerBuf.create(loggerBufP);6 K. [. m7 U! k: Z+ c
appLogger.instance.name = "AppLog_Core1";/ `" I* O9 t6 L
Defaults.common$.logger = appLogger;
% f6 V5 [; y% A! o" Q- F+ _Memory.defaultHeapSize = 0x8192;    ( Y3 Y3 \1 |2 U8 G7 _% h; j" B
Idle.idleFxns[0] = "&LEDStatus";
$ |/ B" C$ H* x: u% p# S$ `- e2 GCache.initSize.l2Size = Cache.L2Size_32K;* ~2 v7 `& f/ J# S" {# Z
% K" T0 ~" q9 K$ g' M7 F6 Z
回复 支持 反对

使用道具 举报

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 */* e5 W, t) K; z& o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 U2 q+ @# e/ I, ^9 R# H
var heapMemParams = new HeapMem.Params();' f  x) F" n* A( L) [1 G7 h, q( @
heapMemParams.size = 0x4000;
* E2 I8 C! D1 M
  ]' G& n: Y( Lvar Memory = xdc.useModule('xdc.runtime.Memory');
  b# J+ d2 d1 t6 f1 UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 ?7 n9 Y# D/ Q( m" X9 p
9 f7 k) ^; r2 S) R我大约calloc  每次共计大小为5K*16bits,/ N$ @( r2 g& K* Z. V+ Y
而默认配置才0x4000、需要改大。, S( n9 y2 ]" q  ]( H
6 N. I8 R" D+ n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 ^6 T. B& E, q% BProgram.heap = 0;
- Y/ ]& ^6 ?! d0 uProgram.argSize = 100;  /* minimum size */
: q5 r7 s8 v0 l) W8 QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 11:46 , Processed in 0.041858 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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