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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ j# @2 |9 ~# O- U; z* u
; p/ ~5 ~, q+ r) Z6 J- s) S4 E    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 ^% Z0 m; V2 C+ A% @' Q( h0 F- I
6 M( |1 I0 g, R4 {! e3 @' |6 _
其他程序段。。。。。
4 V) o$ Y! w' u+ W6 R0 F
. q! z9 e+ W1 E, M) o) X5 h   free(x_d);3 o1 R$ T" A, e

# l# |! Q( v6 x: F使用DSP侧单独调试功能,验证动态申请没有问题,
& D# ?' s6 g; I& C4 \: p# f4 q" }  v4 f& G3 G5 o& D5 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( w- l; T2 J4 `! X% e

: A2 C2 A, g0 e1 C" F( O. S
# h* u6 ?2 k- [, X" W) y2 s2 Z  C
! l+ ^/ v9 c2 K4 N' F  Z3 Q  ^- z, z" l9 l/ G
5 o) ~8 w8 Z9 T& ^  E& A( {3 @
0 n& y. F$ T6 n

; f$ ~" q0 d1 X- V7 r+ V
0 d7 B+ v* m$ H" j& E, ?
4 U& N2 A0 ^: P1 Z
0 y% u( P/ w6 M$ k% z6 v, Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 Q9 V% \( J, [- j' V1 g8 h  ?; v6 F- t
Program.heap = 0;+ g5 [9 O1 B! z+ e3 {
Program.argSize = 100;  /* minimum size */
: B5 L0 g! w' V% ~1 ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 O8 V4 s! U4 b- U* |% ~7 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" j/ M, B+ b( Q. e! ?; `+ F" [
var heapMemParams = new HeapMem.Params();. s. ]. K8 M5 ]( Q2 z
heapMemParams.size = 0x4000;
8 f' h1 l+ W  g( }( v; o7 B
! H0 E9 _! w# Q, g* J8 Fvar Memory = xdc.useModule('xdc.runtime.Memory');
( n: K# K  m. p6 \; ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 h# e, ~5 J6 O0 ?' }
  A( C0 t2 X7 ]
我大约calloc  每次共计大小为5K*16bits,
6 m6 j; Q' A0 A4 G! R而默认配置才0x4000、需要改大。
8 Z* g2 L0 p( f" Y! ?2 b' s9 a/ f  r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 T; O, H: J7 g0 g2 T! n$ e& z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 Y# @# y5 T" {9 [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 m& Q+ O7 e; c$ W- o, Y, t, f
0 I" q; J# [  G3 i, R
是不是需要在DSP.CFG中进行配置
4 p2 A5 w# \# K  Y+ j# I' c我现在的配置为
$ U5 D7 `, t; m; M! Q0 H8 c. u- w  x8 P  k5 E' O6 o
/*  H0 A! F' h# x2 j% \' d) m
*  ======== Operating System Configuration ========$ l+ C) V$ }: G
*// z. {- p( X, x2 F& L8 H
# t( M1 b: c5 O  H: r) k3 ~
/* no rts heap */
+ Y3 J4 d+ D7 _$ Z0 t* A" s2 MProgram.heap = 0;
3 x! v" @4 k2 J* x1 |3 V' JProgram.argSize = 100;  /* minimum size */
9 A. c( l! i6 p: ~/ oProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 L4 j  F# |: l' @' V* M0 t+ w
5 _: j1 U2 S, T2 U: i4 ?/* create a default heap */7 g. y' T+ Y/ E* U& ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  s5 g" r" L7 T8 o) zvar heapMemParams = new HeapMem.Params();
+ J" d7 \! t. l" theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# s6 W3 }! {5 M) U& J
' }: g% _" ]& h. @* C% t& V# F6 B) a
var Memory = xdc.useModule('xdc.runtime.Memory');& b4 L- A% f9 d5 j* e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! d) b+ `" d- J. S
/ _" l: f- s% [. J0 M: v! E! o/* configure System module */
+ E0 n' F# W( C+ Evar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 ^# D2 ^+ Y1 r- ?SysMin.bufSize = 0x1000;
/ J: B) ~1 t5 ]SysMin.flushAtExit = false;
: w8 }4 g+ \' v' d; e8 [
# N% }! p$ d+ ^! pvar System = xdc.useModule('xdc.runtime.System');/ }0 b' O% K: {9 W
System.SupportProxy = SysMin;9 C3 ^( ^8 t" C  w, C

2 M; @0 k. n. {% a! N& E3 K/* configure SysBios to use the lower half of Timer 1 */# a! O. ~5 W) m1 Y: m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! A; c# j! {& W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: L( a/ o- s  K5 STimer.timerSettings[1].master = true;' s+ K; ~% W. q9 R. {
Timer.defaultHalf = Timer.Half_LOWER;
) M4 r6 J* G! e. a. Q6 B: SClock.timerId = 1;
% a; D& h3 S. W# P+ U3 _$ L& T
& k' \4 q: C+ r% ^- T( s  O3 L: f- T/ h2 Z$ n
/*
; ?- L0 _" r6 P9 @6 ^4 V *  ======== Miscellaneous Configuration ========6 a# n) d$ j" V
*/& h1 h& C$ H" K

: r0 I! r6 m, r: P7 S9 H. N/* set default diags mask */
; R, U8 `: n6 g0 L: V. R2 W( nvar Diags = xdc.useModule('xdc.runtime.Diags');2 z& ^6 P/ a2 q( d  Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  z$ l' p$ _3 b7 r) M0 w$ |. ?( a$ c% N. }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# N: H9 t: q" C; w- H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 c  ^* p. n9 Q; j  C8 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 P% o0 w1 C3 J# y! p7 q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 o3 T% U* w% n/ J$ r  y5 \8 }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& q3 \* P9 `( `2 q; YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 t2 g% q- U. h6 b$ f9 Z: d7 ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! D: e2 _( U3 ^Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& z7 F/ B" N& R9 v9 g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ f) ^  `7 x$ I1 v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* |/ ?$ H) E' j& b& ?+ ?- Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! Q' W: C" I+ I, E. n7 ?( |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 [3 Z' ^8 n" Y7 WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 s4 Y) {, Y/ c/ c; M( w( aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# S5 |  d; z/ p
% D' w) |4 x! q% h- h/ i" z3 E/* override diags mask for selected modules */
% {" _4 S0 w: v# r8 [xdc.useModule('xdc.runtime.Main');
5 q" e; I% ]. i6 o- J; ODiags.setMaskMeta(. b) u7 i( T- o  ~2 B
    "xdc.runtime.Main",
6 U+ v3 q7 S5 S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, N* r$ I) b: i9 R3 j  Z4 d, `    Diags.RUNTIME_ON
3 P; B& K( X) _2 p: v);
. Q3 y2 V5 L( ^5 T& }) c) C
+ q6 j( s* M6 t8 L5 |) K/ J5 ovar Registry = xdc.useModule('xdc.runtime.Registry');! h/ H. E1 G( M! X" m$ y$ y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 O4 ~3 X/ o: y$ N; O( B/ [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 o; O* w2 R/ a2 b: K3 f$ A5 s* }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% X" \  s/ l: I9 y1 h' ]6 M# R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% ?) J/ {; a0 l" i- t2 A$ p: W6 j' t
4 F; A2 E6 m  _; Q9 X
/* create a logger instance */
8 ~  W8 m; D0 p- X: H2 lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# A  K( L' `, v' {, S, zvar loggerBufP = new LoggerBuf.Params();
" b1 s( X! B5 l0 G& ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. o  w! P# }/ Z+ X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 k6 ~* V5 _& f" p  ~2 {4 P
' z  G* j  @" D4 i* L* g) H4 m" pvar appLogger = LoggerBuf.create(loggerBufP);# j! o! O" C& V! G4 y6 p
appLogger.instance.name = "AppLog_Core1";6 }$ W; w8 u: I* S7 b
Defaults.common$.logger = appLogger;
8 L0 s/ R4 Z8 }Memory.defaultHeapSize = 0x8192;   
7 y1 U6 p5 p+ I. o9 [% q0 }  }4 k" AIdle.idleFxns[0] = "&LEDStatus";
5 s* y8 r& ?0 hCache.initSize.l2Size = Cache.L2Size_32K;' C0 s+ p! x4 \4 T  E1 x. V

7 U, I9 G& I6 M0 [* q5 X# }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 12:28 , Processed in 0.043301 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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