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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 M5 V9 F# ~( \% ]1 ~8 ^% l+ q+ f& s8 Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' N; Z5 ?. k8 ~! N$ {$ S
" ~) w" n) ?' f# K4 \1 K+ [其他程序段。。。。。
# j1 ~8 i$ z; Q9 \ 1 y2 u% ~- \2 b: H9 f
   free(x_d);/ c, A* @8 R" z" _9 V- a% C

$ n/ w9 T0 l6 C; u* f7 u" @  ^使用DSP侧单独调试功能,验证动态申请没有问题,# p; i8 d& o3 w5 [/ H0 Q7 Z* T: R
! [9 t% _5 M# h$ K# J1 ~$ r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, a3 u/ F1 b& y* g) f# |" l
! ~' s6 Y5 n$ W( N

3 }9 L9 E6 a! |; p3 {- X
6 F: u# b. b5 x* ]. `3 n; p# @! O) U: i/ N$ z$ }2 o

" r. S  e. q% j6 L4 }5 R
6 I: M; f% K; z+ N) C/ c) ^- {, R" w1 t% o; _' O; n2 o4 m

& S1 x: }1 Q5 A3 A2 }# M% s0 F3 ~+ d. L  @1 y
4 k/ i3 E' c, V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: p  c7 I( o9 `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. @$ @) x4 w1 M& {3 h3 u" o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& w0 Q; ?1 K3 f* ]; p8 p" E( A

. C% p9 Y$ g. @! U是不是需要在DSP.CFG中进行配置! e, ^( R& T; q- L; |
我现在的配置为
% R+ j2 e% f4 H/ ~  P; S$ Y* X$ Z  P+ z7 S2 E( K: S/ z! l" P
/*- i8 W- H! |9 t* |9 o+ L
*  ======== Operating System Configuration ========
; j  F1 o: _: I */) {) J! T# D) x

: f6 k5 i. Q1 v# Y& C. l9 @/* no rts heap */: \) c5 Y: x0 v" ^. Y0 O/ H
Program.heap = 0;% }( J9 z1 k+ ~3 o
Program.argSize = 100;  /* minimum size */
$ h7 `3 P2 D( V6 N$ \  W- LProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 S, Z4 M7 s% A8 t) z" X( v
. a" }9 }9 O6 @- a# }% m
/* create a default heap */
3 P5 K' ], E# u5 }1 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& j$ O4 ^# T: V3 A2 i! |var heapMemParams = new HeapMem.Params();) E! e! B2 B4 x% t' i) {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. D: [  l  u$ ^) K1 U) e2 x! G2 _/ Y: e+ G6 E" Y5 |
var Memory = xdc.useModule('xdc.runtime.Memory');
8 X6 b3 O, g8 U% o  tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 E$ r0 [8 P% }% B6 X# r  x  t+ S  s0 j
! n( A/ `# K5 I0 k; L3 K/ y, h* G( v/* configure System module */
, N5 K- [6 t* g) lvar SysMin = xdc.useModule('xdc.runtime.SysMin');' \3 X8 V0 ~0 [5 O$ z
SysMin.bufSize = 0x1000;
& Y+ C, Z, D+ x1 o9 L) s1 [SysMin.flushAtExit = false;% n6 q: ~8 M" Z  t

  l" N/ i9 b: Cvar System = xdc.useModule('xdc.runtime.System');
: D+ t0 `: V" L" `* h; ?; dSystem.SupportProxy = SysMin;
" c( u3 i, [1 ~/ c& s# {
$ {3 ~2 y/ }  m( z3 B/* configure SysBios to use the lower half of Timer 1 */+ c; W7 O2 p9 R  [- U; H4 \8 i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 c& Q8 _8 S; i6 x7 d7 H% [) t. |var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ b" [6 A/ t3 q1 m8 vTimer.timerSettings[1].master = true;
9 L# ?; X2 P4 \0 ~8 [, P/ @7 GTimer.defaultHalf = Timer.Half_LOWER;
% D; O+ Z9 {$ \$ |9 ?8 kClock.timerId = 1;
9 h2 \: P8 G* f/ G7 j4 C
7 q9 N* Y$ p3 q
5 T  q( X  o, e/*
5 d" `( z9 _' w& G+ H8 z4 y( o *  ======== Miscellaneous Configuration ========
. E7 C) P; h, ^! ], g */. D  n9 Q' `, c

, R- Y/ p) n2 g7 ]1 r/* set default diags mask */
* d! {2 t- ^8 m0 Cvar Diags = xdc.useModule('xdc.runtime.Diags');4 D2 v' k6 E% O& ]3 v/ |& o/ |
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ p8 m, K* k, p
, [. B) g9 r& p- {7 v+ L4 T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( t8 a4 B$ @! `8 |/ T, S" \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 C. n" g" G: |* Z4 i6 L! o2 n: i
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! z* ^8 t$ k0 b( N- l+ dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; I  i# E$ U6 g3 `' V- ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) M& o2 t  u$ l8 \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% F/ D9 Q; h! @; t# T* DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; q0 c' Z; p9 W' [# e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 ]8 h. L+ l& I* ^7 x4 m4 k1 J9 jDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' F2 T  F: o3 p: R! J4 Z$ dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) l3 _2 w6 G: a1 C& T2 {" w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ h1 t0 O5 X2 u4 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 N# [1 O3 d7 F. ]; z7 }/ `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 t# \3 o* e! @+ T) T# wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" S3 n) h% g5 G+ J' ~* N; X% T9 ~3 X# d' R! n9 T
/* override diags mask for selected modules */
  L( [- \" w  w" F5 W; y, K; S5 \xdc.useModule('xdc.runtime.Main');
8 E; U. B3 S3 g* ~0 qDiags.setMaskMeta(: P8 r7 i6 N0 C0 d
    "xdc.runtime.Main",2 v- S7 H% B' b; X) `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ ^- G: K% L+ x9 S9 q5 h    Diags.RUNTIME_ON
. a- J- P. V! e4 V$ ~# V( c" t/ |);( L  }8 A+ a: L! [: P5 n
: Q# o+ I& U  [4 a+ j8 p
var Registry = xdc.useModule('xdc.runtime.Registry');+ ]7 Z$ C  r5 x3 a0 u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, T% d- R5 a8 zRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; Q3 P! {8 C% x* {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! }& `& x* ~% A$ u  Z7 h) b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 V) M1 I& V" }2 I
" n1 j0 M4 s- B/* create a logger instance */
# G( T+ L! O; W( w0 avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 ?& W2 D& q- M% i
var loggerBufP = new LoggerBuf.Params();* \, U) g  p/ K* r6 X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 d( W( K6 j( T! B8 w0 o0 ]$ C7 GloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 Q8 ^3 w; n8 k3 G
7 Q; M' W5 b$ x( L# \var appLogger = LoggerBuf.create(loggerBufP);
# f* V# l2 X( f& ZappLogger.instance.name = "AppLog_Core1";2 z5 X$ L( }: X9 J& \4 Z" ?* Q! z
Defaults.common$.logger = appLogger;; O6 b, W4 ^. K- Z: Q$ W
Memory.defaultHeapSize = 0x8192;   
  ~% m4 y+ c. O  H: B' FIdle.idleFxns[0] = "&LEDStatus";3 \" K  y. i) r$ F% l
Cache.initSize.l2Size = Cache.L2Size_32K;
9 n9 x  `' R) H/ R& @# H) v/ \' j! U7 ^; S7 t5 e, |
回复 支持 反对

使用道具 举报

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 */
) a8 V, }) I' i+ S  kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  {+ z9 d7 y% u
var heapMemParams = new HeapMem.Params();' N9 M) T( }8 W3 P5 U
heapMemParams.size = 0x4000;
, i% v: b/ V7 {! Y; i8 R4 l% O4 j* q$ ^: R" |" d% I4 L6 Z
var Memory = xdc.useModule('xdc.runtime.Memory');. e. o, ?3 g5 s: d" `8 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 R- u& r+ N& {5 O+ `2 e3 ^
0 D+ ^* B6 |( e9 w5 W
我大约calloc  每次共计大小为5K*16bits,0 C2 K# Z" [6 {# R! k5 P
而默认配置才0x4000、需要改大。6 `3 \2 o, T0 A2 d6 h: ~; {
2 y" {/ _6 f. [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 F- [. i& G" A+ MProgram.heap = 0;
" C$ W2 G4 Y7 T9 c) ]5 v- fProgram.argSize = 100;  /* minimum size */
8 S* R% y  X% ?" h2 v- F; Z1 qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 12:20 , Processed in 0.046084 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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