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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 u" c0 K" F" C9 |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  T1 F3 q& D: E7 ~0 x

/ E+ K! X# y# F7 D  P其他程序段。。。。。0 s7 e3 P3 R0 e
: C3 p, d. U1 a2 J% s; m& `5 i
   free(x_d);& e6 }( `) K) |1 w0 ~2 J
  Q  _$ z9 D% {$ G% s4 @6 d' D
使用DSP侧单独调试功能,验证动态申请没有问题,7 U) t; v# U8 c7 J& m% y6 t
( b+ @9 w0 t8 e, R7 a- o( n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  w+ x' z( ?' |( b+ ]! E/ ~2 t

( [9 k3 k* y5 y3 x9 ~4 O
8 b2 i# Z* Q$ N" b4 ~  a- s1 O9 O
4 A; @/ e  U$ j6 b, R

; S* @. S6 D/ R+ @0 Z3 M: Z4 w; u! {# W" y# X4 W3 Y* O6 y

$ V- p) I9 h% Y" x4 V* L
+ M4 R3 |0 k, M. Z6 g9 d$ h3 x  ?$ P0 m' y7 s
' i, L* ?/ K& [6 L8 `. @+ e* Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" D% P' M% D7 r' i8 S$ T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) Y7 ]! n  b0 @/ F% A5 R4 C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ ?$ g9 X9 W6 e7 M
5 w+ D! H! q: t1 H. b2 z
是不是需要在DSP.CFG中进行配置
* A1 U9 Y( v0 @1 F' v我现在的配置为! M: X$ N+ z$ ?# m6 e
: s! p/ Y% j1 t9 X3 p- [
/*2 l! A( q1 V, R+ ~! T7 i; u$ L6 |
*  ======== Operating System Configuration ========. \9 `* A' }+ J6 S6 C6 r1 m
*/
) W/ ~* |9 Z/ J9 D  k) }
& x$ l: p) S3 H; E2 q# i/ I/* no rts heap */
. H0 |4 s" z# N: N# wProgram.heap = 0;
# M& ~: r! `& v7 d) t! nProgram.argSize = 100;  /* minimum size */
) D. S( E  \! N% B2 j6 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. D1 L% B, f/ R/ N/ R% |
1 S. o: s4 g' l4 p/* create a default heap */
/ [+ ]( K! L  ~6 i; _) Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 d& k" t, R- j6 _1 v0 x+ `var heapMemParams = new HeapMem.Params();6 U5 P6 z- W; z, T' _# o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& B" [5 M: y8 c2 Q' a
; q+ b9 V: B% J2 j
var Memory = xdc.useModule('xdc.runtime.Memory');+ U9 }5 X* ^- Q8 e' s+ Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% U1 _/ I4 T0 J

. O  d; f" @5 g# U/* configure System module */
- E5 S1 `8 E! Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 Z, s0 ?' Q5 N% Z3 A8 H
SysMin.bufSize = 0x1000;
4 d3 R$ z) ?3 U( S' sSysMin.flushAtExit = false;- w8 K% l9 q( D6 I4 Z, Q

6 h6 V) d* s9 \& U; R3 o8 i1 G, x/ f5 wvar System = xdc.useModule('xdc.runtime.System');
# [6 T$ Y1 H& a2 N) G4 ySystem.SupportProxy = SysMin;
! @6 Q7 c3 I: u% C% `
* q5 r6 W% E% F+ w; T+ K/* configure SysBios to use the lower half of Timer 1 */
5 g& E- G( [( _, O1 d% A# H7 ]0 y6 v2 Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; }; r" Q& J- B4 v& e% u6 Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 s* V5 ~7 ]% ?- e2 w
Timer.timerSettings[1].master = true;- J% f. _6 J2 U% a# {
Timer.defaultHalf = Timer.Half_LOWER;
& ?. Z: s2 ]& t2 E3 N$ z$ jClock.timerId = 1;
7 V9 L- y4 a# c$ @) u2 |0 k+ P) a$ X. O+ Y
( n7 n3 k4 N3 F3 z# Q
/*$ c3 D9 F7 o4 ?1 J7 n: j
*  ======== Miscellaneous Configuration ========
7 [- |% e) L8 V4 _ */
8 k; X6 E9 Z  S- r8 n/ X  u1 u% h, s1 D1 E6 h1 z" y" @6 W1 G
/* set default diags mask */
) f$ @; M. s; U( k- n6 @var Diags = xdc.useModule('xdc.runtime.Diags');
3 @& H# }5 P, |$ Z$ I0 Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');( M3 m" y& j$ ~0 ]: C/ i1 ]
1 {  a9 R* s8 i1 d$ ]1 k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ N5 O; x- r- cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 R, G8 P( J2 ]. J/ b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 b8 o- z5 e6 \' \1 H! WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ q4 `$ Q2 `4 H/ L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 d0 E8 X* S6 h3 r5 z4 MDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% `- `8 v, R# o- `9 e8 I" Z: ?Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 O' F- `" b8 ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ D; V% U# N, W( l7 K5 E' ~6 {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 v0 O% q% ]0 G6 i5 n8 jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. g; e. U! A( ^# FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 V& G: u/ i& l; V1 O. e1 zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% d9 C. ~1 K" m: Z2 J: v8 PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 s1 [3 Z. Q+ y! B+ [* S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ Z/ l9 g; I5 ]$ W3 d& E% x

$ R/ t3 u- @" o/* override diags mask for selected modules */2 q  {# R9 [4 ^8 U
xdc.useModule('xdc.runtime.Main');" H' e2 j  ?2 `. p4 Z: S
Diags.setMaskMeta(
2 p# Q& e' N, |2 c/ U    "xdc.runtime.Main",) n. u3 A* r9 C' I" w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; V4 C5 c8 }7 f, V    Diags.RUNTIME_ON
: _! @. y& R1 R);
! G4 \+ c0 f9 g0 K3 s; x  Z' H0 b* K5 f0 b# o6 R
var Registry = xdc.useModule('xdc.runtime.Registry');8 N+ E& i# T  X6 y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' g" U  @: M/ Q/ E! r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) Z" J1 T( u: Q" `1 V* Y/ B7 F7 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" N( Q% @. w7 f% q- IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! C; z" \; S5 h3 D* h
" \$ p0 J( k! a1 k
/* create a logger instance */
  Z* V9 U- n4 w7 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; `3 h8 r4 {/ K, z# L4 q$ zvar loggerBufP = new LoggerBuf.Params();; c9 z& W( l  k, j9 _0 ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 d, t% c& R0 R! {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( C* N# |* k5 S. x- e0 s3 B9 r$ i

+ P/ u2 V- `1 {6 ?7 x. x: T; xvar appLogger = LoggerBuf.create(loggerBufP);
$ `. a1 j: z  W, W( e4 H  a  n) XappLogger.instance.name = "AppLog_Core1";4 M3 e/ c/ B: K: z; }
Defaults.common$.logger = appLogger;2 m( l0 [& E% Z' E0 [
Memory.defaultHeapSize = 0x8192;   
+ }6 f9 C9 {- |3 m4 R. iIdle.idleFxns[0] = "&LEDStatus";# ]2 x1 z( K8 \# V. k; f
Cache.initSize.l2Size = Cache.L2Size_32K;$ S( m7 v7 W4 m8 v

; Y5 i3 j7 O! \- F
回复 支持 反对

使用道具 举报

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 s; j; x/ A( c$ X2 w# h, I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! p2 G/ q* |) i' s2 y- Hvar heapMemParams = new HeapMem.Params();
4 u; R' R# a4 a  r6 b' XheapMemParams.size = 0x4000;
: \+ |* H: ]( w: c# T) B! C
) I5 U) T! u, c1 uvar Memory = xdc.useModule('xdc.runtime.Memory');- X0 y) Z+ S: l5 s" q: t+ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# A+ X: Q1 d% g9 }5 `
4 `% O* @- @- C
我大约calloc  每次共计大小为5K*16bits,
' J! A( C5 ?# ?/ b: H而默认配置才0x4000、需要改大。
" C* b: H$ i) n9 {! K
; _3 G( L# T0 v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, r1 r6 p" ]* v
Program.heap = 0;
- y6 {3 \, X, @# eProgram.argSize = 100;  /* minimum size */
; |. w- R# M, \7 GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-6 10:37 , Processed in 0.052405 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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