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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 _7 b) G' ^5 J6 ^2 ?

, c, P) R9 [' ]1 R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# a. ?+ M, v0 P* E3 d7 [& C* _; j) j  {7 G! Z) \! p8 j2 O; d
其他程序段。。。。。
& o2 X8 H0 R- L2 H : L3 F/ c" k# F& |; f
   free(x_d);+ B4 g" Z1 ~& K7 V8 p5 S
- ~6 W6 j  h& V: A$ t; B; ~
使用DSP侧单独调试功能,验证动态申请没有问题,8 T- ]2 o" L' C

: c& t: Q+ J' A- V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& [; x$ R* I5 `2 L: v
; K( C. l- |( U% b) j1 d8 |2 [
" ?& [/ C/ o* u! h6 N: k
' g5 z9 w' i  f+ c# C# J: ~- N+ M1 N

% v, G6 V5 V# D' V8 h. K& I  c  {& O' e
9 I+ `: I) l6 O

+ u* C5 ]" a0 k9 r) _) _$ U
" k: J* F! c3 d+ X. S' [
0 k8 a0 X  g; A! e1 V0 y9 E# x& y4 h7 N
( f6 m2 _# A0 T, X5 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 H& R6 A: X2 j2 W" Q9 L& Z8 u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 N& @) Q  z. \! x. F( {, R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 P0 n9 t2 f  F8 i: E8 G8 @' V- ~

  d% K/ [" k" R( [+ E) o9 M是不是需要在DSP.CFG中进行配置9 O3 \! ?6 w- T: J2 O( G& k
我现在的配置为8 a" f4 |: J, ]3 d% @/ S# l  a

* m4 ?. @/ \! y3 P5 C2 k/*$ R! U4 I/ a4 v3 _
*  ======== Operating System Configuration ========9 d5 ~- K$ `% l. ~0 ?
*/
/ }" p/ v5 C( V4 l) j# J. p6 R8 Q( N( j" T/ M( c, [! [$ a
/* no rts heap */
! U0 {$ ?2 G" D& ~% k% T( N$ P2 c8 o3 gProgram.heap = 0;& H/ _( g& \+ u; z" x, a9 O
Program.argSize = 100;  /* minimum size */2 `- M% `" o9 _* E! `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# X* ~) x* X# r9 C1 Z
9 H6 S& P+ `) }! _: i
/* create a default heap */# X2 q* T7 |8 l, A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 g  W! a- u# h; x# V% C3 d4 X: h
var heapMemParams = new HeapMem.Params();
! h  L; h/ J1 ]& c! n& }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& ?  f+ U, f( ~9 S4 w( @0 ^9 p" E/ k! [* F
var Memory = xdc.useModule('xdc.runtime.Memory');
% s4 E% x1 }! \* KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' ]  \" K4 `" P  w+ ?" E6 E) S( f

$ w( `9 ?" E; O9 P5 Z/* configure System module */- C5 _9 a7 |( h& h. ^- |9 }
var SysMin = xdc.useModule('xdc.runtime.SysMin');; }" Z" D' \7 U5 P" q- g
SysMin.bufSize = 0x1000;
* U5 o8 s  w0 eSysMin.flushAtExit = false;
* H% u0 s% G- k7 T2 C! a, w4 |  H6 k) {5 }. s5 l% q# l; T! D
var System = xdc.useModule('xdc.runtime.System');
$ x* ]! j6 K9 M1 W, y- mSystem.SupportProxy = SysMin;' f$ q4 M8 Z; T! c8 x
* q: T  n4 F* s: E, _5 M3 U
/* configure SysBios to use the lower half of Timer 1 */" h  N  g/ F3 v% @7 A: f5 t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 h5 U3 E2 w% z% g$ gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* O0 e! @  p, A3 I. kTimer.timerSettings[1].master = true;
9 l8 D6 [; J( |" e3 P3 x5 Y# @Timer.defaultHalf = Timer.Half_LOWER;) g+ O6 Y  j: d
Clock.timerId = 1;
( T' N$ d( z6 |- ^: a- F0 F& a# ]( ], X4 f, t9 ?
1 N$ l* n* }$ a4 r3 l) _
/*
2 X1 Z4 O% }2 U' y *  ======== Miscellaneous Configuration ========
0 V& h- O, ^; S& @; v- } */
* |0 e; t2 P9 L: r2 [" w  A# g4 W  O2 E# ]6 T4 ]
/* set default diags mask */1 G9 G$ p: q% ?$ |/ |. ]! q8 X
var Diags = xdc.useModule('xdc.runtime.Diags');+ }* T% B2 R  \% ^) @5 B4 ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ \/ V# i8 P! T5 n+ V  w! r/ F& w

* F" o# i+ a  Y, l1 M. pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' S0 a- C3 X# s# I! x8 k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 T) w# j/ j' e' q* j; \
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 U6 ^# _! b1 M* I+ E! l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 l% v4 R: r/ b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% T0 z4 y4 ]) q- d  H+ fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: o! Y# i2 s' S& E& `8 v4 I& u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) I. i$ c( I0 h# b  B& W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 ~6 S9 T  w$ D" m/ x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 R! j/ C5 u* X# ]
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ r/ g; E6 j& j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 q" I* ~* p- ?8 j' d- iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 b# n6 C/ c3 M( U0 L. A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ N2 [& M. R2 G1 h4 m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 A- Z/ u8 z9 Z* C
" O1 f/ K' W9 m  j* E, s$ O, ^
/* override diags mask for selected modules */
  _# f$ R' h: e; _4 ^9 mxdc.useModule('xdc.runtime.Main');. i) B  L6 w( ~% ~# j0 V2 j
Diags.setMaskMeta(4 W) V$ \  S) d3 U! ~9 ^
    "xdc.runtime.Main",
0 T3 w# [) M5 `    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. u& Z$ X0 s" C$ Q, k0 O; B    Diags.RUNTIME_ON* Q* u1 ?: o2 a+ @1 |7 v" e
);
: C3 ~- i) V; r5 C
2 w. l, U6 x- e7 {/ zvar Registry = xdc.useModule('xdc.runtime.Registry');
% e/ a$ G% {1 O/ v: KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* [& U/ c1 M5 n  V- P7 _; d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% Y  G. e* }' U$ i% ^2 A% r& ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ w' s3 e! @0 E' T- {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. }- }6 T8 w6 p$ r
9 u" r1 k$ p; u% ?/* create a logger instance */  v( y( L5 a2 y+ q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' _7 d; r% w* H# tvar loggerBufP = new LoggerBuf.Params();, O* j. j, _8 @$ h) s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 l, D, `9 h7 w  i9 uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 D% K. U( Q+ |. A  `" B
, M, O+ D! K- x2 V, G+ Cvar appLogger = LoggerBuf.create(loggerBufP);
+ L, E& S& U0 j  XappLogger.instance.name = "AppLog_Core1";6 \$ r) l& v6 \( w: a
Defaults.common$.logger = appLogger;
6 t' r6 Z# i) t: HMemory.defaultHeapSize = 0x8192;   
$ k3 I2 ?4 h- a0 C4 oIdle.idleFxns[0] = "&LEDStatus";" N& G( r  Y! T6 U0 Y5 c
Cache.initSize.l2Size = Cache.L2Size_32K;$ Y: ]; o! W7 b3 x' W7 q) p
0 Q4 a7 i0 e0 d$ |5 N8 \
回复 支持 反对

使用道具 举报

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 */
3 ?& y- p) `4 _" h$ i9 R2 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: ^0 L9 k- R* [. _9 a1 s! R/ |var heapMemParams = new HeapMem.Params();
5 v$ F3 j$ r4 ^: GheapMemParams.size = 0x4000;
* S& }/ _& e, K- i  Z7 X
. a; ^- y! n, vvar Memory = xdc.useModule('xdc.runtime.Memory');: F2 Z8 G; t3 S. o& c. v# u4 b: ?) w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 Z/ u5 f5 Y) a9 l7 O( n& b/ @; b8 Y9 b; @7 m; H
我大约calloc  每次共计大小为5K*16bits,& E8 U8 V$ x# L' ~
而默认配置才0x4000、需要改大。
+ j' ?! J) Q/ P8 n: n) B* r. x, j& u, W- P5 Q2 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: Z9 C6 o, ?7 `4 n, I, EProgram.heap = 0;
( T6 j, |' B. ]2 z9 P2 K0 G* {Program.argSize = 100;  /* minimum size */
0 J0 N9 |: C# @" c# `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-3 04:59 , Processed in 0.042130 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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