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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* X: U7 t9 H9 Y! o0 }( q6 `# A) z, P4 f8 O: f% l. D. o/ v& D, V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- ~5 a! p, ~, M# n9 T) U- v. N% A8 }+ v4 l
其他程序段。。。。。& ^7 E" f" ~$ o' U
3 Q) y0 i" m9 W0 h. k6 i
   free(x_d);" a0 m/ [, v) c2 t
7 V% U. [7 @2 m; A, L) f/ d
使用DSP侧单独调试功能,验证动态申请没有问题,
; q; o( K; R2 r2 L* F# U
4 w9 I+ M( ~$ u0 y7 |( L6 b但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 ~0 s. `8 K* ~6 v' y* w

6 }6 r+ B/ _- K( R" L) j2 e" k% h. [
) n& e: {) ?2 Y# Y, d6 x! d# {

" f4 a& d* u9 b! P; I' Z6 f% a& V3 _  L/ M3 Y; f/ L" h# E- p

8 H& s6 h, b0 _# `' B
: K9 ]; K+ b8 B2 r, z: l
& S" C4 k3 |$ c' t5 j. _, X. J5 S6 c* c1 C$ W' G5 u% a

8 a6 h" {( _4 E) b! C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* q! q  Y  {5 [0 p1 \& U: S! d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( d% D6 B$ Y+ Q* g1 P5 O1 a+ H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 ~# }: d, O! C. P8 T5 C6 ], L/ w
: [, d6 z$ g2 p  Z1 c, |4 d
是不是需要在DSP.CFG中进行配置
" R% v0 X/ n5 E/ J我现在的配置为9 u+ t3 ?7 V/ q7 h
/ [6 U9 G8 g, a
/*
1 p* Z: K1 Z& g3 |2 K *  ======== Operating System Configuration ========; }2 T# W( L/ X& `
*/" P. u, O" ]4 P% K
8 B/ J: \% i, a: q) J9 E
/* no rts heap */) [7 Z) f  A5 W! y' s; A7 X
Program.heap = 0;! |% q. S1 [6 d; o& V& {0 |
Program.argSize = 100;  /* minimum size */
6 X) f, m! f0 q& u  Z$ l, IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: s/ H: j: [% }2 r  v6 l8 f9 C5 `
' I; e3 r3 e* A
/* create a default heap */6 B2 e1 F0 Y+ y$ l' e0 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ U6 G/ D/ t8 ~$ }% tvar heapMemParams = new HeapMem.Params();: g  g0 H3 T1 U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 ^1 x) t  e9 u1 {' M; T: L0 z

0 ^' l' K- `' Y3 `- B# e& y7 ?
var Memory = xdc.useModule('xdc.runtime.Memory');+ |2 R$ D- K3 {; p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 X/ Z! v* t4 k2 X* z* H$ `0 l

. d2 `1 x- D1 J9 `4 x. ^/* configure System module */5 g4 b) [  O% c# j+ s
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 r+ s" ~7 Q/ j+ g; LSysMin.bufSize = 0x1000;
; {( [# e2 t7 ~' e9 |/ W7 PSysMin.flushAtExit = false;
7 A" f  H3 H& k/ k5 h- z7 s. h# B; k8 _
var System = xdc.useModule('xdc.runtime.System');8 h1 x. B: H& I
System.SupportProxy = SysMin;6 t$ D0 c3 f3 x& w, J
. e- m. g" ]+ K2 K- v
/* configure SysBios to use the lower half of Timer 1 */3 q' U- b/ N: v
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: g" B) ~; Y( x  ?; B/ Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');# Y: f0 p" l& v/ t3 D, e  P
Timer.timerSettings[1].master = true;7 F; |0 Q% Q. _  H2 M& e
Timer.defaultHalf = Timer.Half_LOWER;( q, \5 I7 e/ j; D
Clock.timerId = 1;
" y  v6 e* S2 v! _2 u, h5 I* L, [. i7 a$ h: o+ {- {5 H

, o: m- @+ m7 {/*
6 K: I! b/ `" G! L: Y& `* Y2 ` *  ======== Miscellaneous Configuration ========7 c0 b0 Y) N1 w0 {  ?
*/  {0 Y7 I7 J" }7 ^; |; p7 M
# ?9 ]7 l  R, I1 U
/* set default diags mask */# g* s) z) l% p, d, }& z. k/ y
var Diags = xdc.useModule('xdc.runtime.Diags');. S& w* Q2 s( G3 m
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 r! O$ Q3 r& E0 S) [; Z* S( F, _5 P- F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 `8 p' V3 l$ h" w0 s+ sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! ^8 ~5 q( b* D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* e+ v! \; [0 p# C( p* j, x. A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ C6 Z4 d# [. \6 \8 ^1 r$ b% IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* P! v- q* W( O1 i# ?; K9 _Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ M- T" }& \6 q$ K$ A) n9 _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 {3 Y% H' f0 e, N3 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 h8 p7 s1 p: j% ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; w. _' D- p' _" ~7 ]; s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 B) V5 y, C2 z+ ?% d4 F7 _* y* R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" Y' N9 f! z0 U& ]/ V0 B7 dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! ]7 E# L' u6 w9 R+ c; s! SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 @0 c! k) B2 ]; t6 D
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% X# m& @- T" D0 c3 O
9 r3 S' y7 j: I' e: G
/* override diags mask for selected modules */1 u$ `7 o6 O: w' p! n- |
xdc.useModule('xdc.runtime.Main');: g' h' \' z* t" Z- t' u
Diags.setMaskMeta(3 q, W3 L/ y! D
    "xdc.runtime.Main",
: R5 y5 F- c" X! ^7 `    Diags.ENTRY | Diags.EXIT | Diags.INFO,% x/ X) x% A+ [  A8 _
    Diags.RUNTIME_ON
' X& o( J5 Q7 f) ~6 K2 T" a);- m/ f: L8 \/ i0 _; v
8 q( C. }6 `7 g
var Registry = xdc.useModule('xdc.runtime.Registry');
  {0 ^% C" ^2 ?& ?# oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; k! z% b6 B) n9 h% rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 y3 X" \. s) }1 m6 `5 Z- s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ O3 V% m- u0 C0 m7 T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' w4 C8 z3 z0 ^! i& R
: o+ A" w* t. r5 j% B, Z/* create a logger instance *// @% {' H5 k5 C% d* Z8 ~% `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 m2 D/ U1 A$ D7 k: X* z  Uvar loggerBufP = new LoggerBuf.Params();' p" @+ }- K2 \. d7 R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 G4 ~7 V! z$ m# floggerBufP.bufType = LoggerBuf.BufType_FIXED;
) ^! @5 z+ B3 e# Q$ m2 U
" h( o/ r, q: L! Z- rvar appLogger = LoggerBuf.create(loggerBufP);5 k! g3 M9 ?. m; S3 ^
appLogger.instance.name = "AppLog_Core1";
; X; d  V6 u. z7 T" ]5 tDefaults.common$.logger = appLogger;) X- G! H9 M, q5 h, v( c
Memory.defaultHeapSize = 0x8192;   
, U9 h5 V/ ?) K  j6 t  k& N1 pIdle.idleFxns[0] = "&LEDStatus";4 F( F) o% C0 z3 O- y
Cache.initSize.l2Size = Cache.L2Size_32K;
, N! s1 c2 G+ a
4 Q& m, e# A& q! i2 P4 T" V
回复 支持 反对

使用道具 举报

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 */( p$ `4 c; `' ^) _: l- E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 m4 b' _6 e+ E2 V7 J: N* Z
var heapMemParams = new HeapMem.Params();
; ~5 y4 U- m% oheapMemParams.size = 0x4000;8 n$ D; G0 c$ M7 Q( f, C

% f6 L4 i% G. e- c8 I7 g' ]3 t: Lvar Memory = xdc.useModule('xdc.runtime.Memory');
/ D  O& P0 H  y" @9 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  s2 b0 {* X) z4 j+ Q( h! l0 g2 {' o4 u' p* F/ j& Z
我大约calloc  每次共计大小为5K*16bits,5 X+ c# q# h4 w( T
而默认配置才0x4000、需要改大。* ]0 p, i6 }9 Q9 x/ V! P- i

, i5 E- ~+ ]$ T6 ~: B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# E! a. R4 S0 ^! a- N( s. D3 UProgram.heap = 0;3 J* E8 k; G6 @* k5 t
Program.argSize = 100;  /* minimum size */' c% s0 P/ d  O. i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 19:43 , Processed in 0.040618 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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