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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ f! F4 x8 B. i* J$ T+ j. R0 ?6 v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 f2 D; E* \3 G, ]2 e
& `& b: g. L* h- [+ q
其他程序段。。。。。; y) x$ f# u' V' @6 c1 T, C- Q' k

* W: D2 h$ n" W4 I* I( ?6 L& K4 Q- k   free(x_d);8 I0 v3 R  U" W! M

( M) T$ O$ Q: s2 k使用DSP侧单独调试功能,验证动态申请没有问题,
9 d. S; B; e6 ~  R
, w0 C. c7 K: o' T) T5 I5 \# P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 a0 g: k  r/ P, c7 k( k3 \' A; i

6 O& [( p# U! V6 E. S! g6 B' t9 M6 a
2 _8 }- a/ P" p8 D; y( G4 P4 Y; c2 B7 l7 w

( A7 C, @6 C7 M$ T) e. t9 }5 d' v+ f- E
1 Q' ~7 n9 \9 _6 X7 T! |
. x* |# s# _7 v: w4 {+ K- r
% M9 ^* t. b0 \+ d

# n- T6 r; p9 J" Z$ h) L6 U
* N' N- r" {  }; e) o  d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ C8 U3 _9 r" I. q' s2 u6 b/ f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: z9 ?! v1 u9 o" |. G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 T3 W* {0 B* N' Z  g! G/ |3 f
" k7 f! i" _1 w
是不是需要在DSP.CFG中进行配置: U9 [" m" N$ z# B3 p" s
我现在的配置为! f: u0 {$ T* T0 C* ]9 s6 `
; n- g- ?' z3 |% t  p! ]8 W. L
/*
! M, D* v: H6 I  S- n *  ======== Operating System Configuration ========
1 U: H2 h. f# }. z7 g */
  z! U4 d+ L# |$ e$ |+ l# q
5 h1 L6 W3 e" S4 r8 K/* no rts heap */
4 F$ `4 S& k/ O9 u4 _Program.heap = 0;0 J- u- W; \+ j4 p8 n
Program.argSize = 100;  /* minimum size */2 ^, d" m: z4 G# U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. @, v3 ]% a7 T, c! q* A
0 g4 W$ \9 s. {" S2 h2 z+ B( L/* create a default heap */6 S$ h6 a/ b: n3 C, `! w3 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( ~; J  N7 \: ~
var heapMemParams = new HeapMem.Params();# F2 v( A1 y9 o7 O6 K. Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 y( m) R. x2 r; a6 ^1 ]
% V- J+ K( i4 Z- d, o6 l0 h
var Memory = xdc.useModule('xdc.runtime.Memory');7 {: v, E1 i6 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 L& l' G0 R9 X7 \/ E

; ^6 @6 p7 E7 H6 o/* configure System module */6 y) \% X  S* E; c) a2 ]. e
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 j/ w5 p- Q: u- n; aSysMin.bufSize = 0x1000;
* k! N1 e) m, G' I% wSysMin.flushAtExit = false;' |" g) J1 q2 x8 I
+ A1 t- o1 ]$ j; C9 ?! D
var System = xdc.useModule('xdc.runtime.System');- a/ s+ ~5 K5 z4 ]0 T# |- S
System.SupportProxy = SysMin;  k  l- K+ p8 x

7 B5 b4 v' F, L  x/* configure SysBios to use the lower half of Timer 1 */
8 V8 W) q# O/ J- Z$ [2 G8 ^- ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 w4 y( H) [* B; n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 g; ?& \5 q6 K" m- g5 ]4 c) y: ?Timer.timerSettings[1].master = true;
) J. \, i' o% q, r/ h6 WTimer.defaultHalf = Timer.Half_LOWER;9 e+ o$ n- ~1 I7 C8 }* }
Clock.timerId = 1;, y- T9 o/ _5 l1 D6 b: m2 ?# y

" y6 N) ?% R6 @! M# h( p4 W& Y: S# A  U* x3 A0 ]4 G
/*
  n4 m- W1 ?; ~3 x *  ======== Miscellaneous Configuration ========
: b: G8 V% B: g" L7 { */, z5 b2 B1 k- V
) z* q+ L" h) S. X8 Q  i
/* set default diags mask */8 f+ I/ P- m0 d8 \0 m- p
var Diags = xdc.useModule('xdc.runtime.Diags');
) r/ Q; ?6 ?* E5 ?$ A" Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');, d& @9 `$ I) M, H0 w8 q
( k( h: r+ e! F5 q" N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ c2 k0 i% `8 V/ T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 e6 T$ r1 D3 J+ N- {8 d3 k9 O
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# i' G; G% V+ d& D& ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 b; |. P& y! O$ o5 @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 [# C" X  b) U& vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ q6 m7 M* y. b) `( E3 j9 I/ ?Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 I+ n% E: J; m/ o. J; y4 J% y) [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 N  u! ?# l6 @9 Y) D  w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 i* R; _  E4 N% q! EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( |4 `$ u1 D4 d  }( T! [0 ^4 g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 X* j9 E5 r# G% E$ x2 L" q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; D" h; o1 L" s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; h" G" |/ N& G8 C3 f, uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# Q4 u0 S& h) U$ I7 _
6 x8 G- H  I8 [- }( c9 u" K; X/* override diags mask for selected modules */7 D/ a4 w9 X7 b- b2 c" i
xdc.useModule('xdc.runtime.Main');) f+ P5 m' P1 f6 |1 C* g
Diags.setMaskMeta(
- T% n  ]2 H0 h* w6 b5 ^, Q' U    "xdc.runtime.Main",$ D2 Z' R9 h* B2 E5 j$ u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; k/ D* P2 T. w& U5 c* T/ R) i; k* j; p
    Diags.RUNTIME_ON
9 g  a' j* A; {! G);
1 \9 l$ `5 g* _' j$ H7 b, Y6 s6 n7 T
var Registry = xdc.useModule('xdc.runtime.Registry');
; u% ~$ K9 n) Z0 m% ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 F# f  S/ r& y. v, @3 j/ n/ G0 }+ P; QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 g0 F4 E3 x$ P* q5 D4 x4 U3 k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# g5 `5 |: @% e+ M2 URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 K, J) l5 d* T5 g0 u9 X% F; v6 f' a
/* create a logger instance */
  ?/ l; K* _0 c+ y- }) U; P: P0 ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( b, S1 Y* q- P1 X" m) ?: F, Svar loggerBufP = new LoggerBuf.Params();& }% A! D% R; c- I4 [" [% B8 E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 u. m1 z. L6 s- m1 z% ^( g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" F; n/ S, W+ [: j' B, }

8 Y3 i9 ?* N, E# O/ cvar appLogger = LoggerBuf.create(loggerBufP);. P9 z" b+ O* P' z+ w6 l, ~8 i
appLogger.instance.name = "AppLog_Core1";9 Y& Y6 k% B1 y, S( G$ o9 M2 s) G/ N
Defaults.common$.logger = appLogger;
% O' b' p' q# B4 p% [5 M- ~Memory.defaultHeapSize = 0x8192;    & Q0 i2 m3 C9 F( J' U2 Z
Idle.idleFxns[0] = "&LEDStatus";
& V- J/ ?1 o, ^: P4 gCache.initSize.l2Size = Cache.L2Size_32K;# t& j: e7 \) p& b' G& U0 [

% O* d3 |) t- Q; D4 `1 a
回复 支持 反对

使用道具 举报

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 */
( C  Y5 e& v2 Q& B" q' jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& [0 L$ t( x! I) p$ p- T# hvar heapMemParams = new HeapMem.Params();
" B3 \+ a& `& b7 o2 j, {* gheapMemParams.size = 0x4000;0 N2 _0 C7 E6 p7 A9 x4 r2 {3 Q
1 }" V& B( Q7 l' N$ Y, {6 K) _5 b$ F' G
var Memory = xdc.useModule('xdc.runtime.Memory');* T# G$ c  x+ l  p( I. N8 M2 _( k# v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* E( O+ U) {  c$ R/ B+ G- |! A+ A* D7 [- n' R
我大约calloc  每次共计大小为5K*16bits,) S+ \' J# g) Y! X9 K- |) \
而默认配置才0x4000、需要改大。
3 e: b- x0 ?$ u6 j
# t( t* D/ u, Y! S- C( h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& B) u( w- ]" q5 _$ [; `Program.heap = 0;) n  `$ c  s* h  @/ d& @
Program.argSize = 100;  /* minimum size */, q8 A# ~1 Y: D$ ~1 t* W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 08:59 , Processed in 0.043368 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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