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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& H! m! C( G9 c2 U. z, u
) }+ c% w8 H- k1 ^: u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& J% ^$ e: u" @' j% [9 V$ r0 G7 `  G2 F% u0 K$ K
其他程序段。。。。。+ f8 a( z" s* R

" e$ Q5 i7 B  `! A8 y   free(x_d);
5 ~# D1 W% Y- x; U# i* D/ Q8 o( G$ m
使用DSP侧单独调试功能,验证动态申请没有问题,
4 X5 j8 V) y0 H6 j# c' x
4 N! U0 S3 K; N) ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 o8 y: r0 x: ]& G0 P' A

& h/ `$ Q: f5 r+ A
, u- l7 T5 o) q. h
1 {7 t- X: U  F- G9 Y; {
3 }8 d. M" l. N. Z. E2 S. _
0 W3 ^' v; W1 f$ A
1 T5 @0 n. I7 s* {, X$ f2 ?# O  s1 L3 B
7 ]  c# l) l) O- v' C
$ [0 W& H6 M% p5 ^" S' B- W# s" P, ]

# M4 w3 C7 O8 B( a* a6 a' i
分享到:  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 */9 o7 L6 g- Y% y' u$ q" ~
Program.heap = 0;4 I% \* w  t9 c) C4 i+ k
Program.argSize = 100;  /* minimum size */
+ _# I: J- C  P% {$ |4 lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 _7 Y7 `; b5 Q" W8 k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ f( Q! S7 e4 x9 L4 {4 N
var heapMemParams = new HeapMem.Params();
: I- ^% I. v3 c9 E) `$ hheapMemParams.size = 0x4000;
1 g$ C1 A" o$ n$ g( ]% q! I0 Y% I' v
var Memory = xdc.useModule('xdc.runtime.Memory');
* m) [7 t8 @7 j0 Z% mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, c9 ^0 R7 |# z4 I3 u+ \. [

- `) N; B4 `) G5 P: J我大约calloc  每次共计大小为5K*16bits,1 [) }2 q( I; q) f* @
而默认配置才0x4000、需要改大。
6 G' J) C# t* S; t1 `0 [& P$ t5 d
" ]0 j7 f$ X, v9 P8 P, c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
* H: K* t! c; V' q3 _3 m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: s- g# {* |+ t2 a1 c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 U- ]3 A9 L" i) I% Y

! `% k) }3 P3 Q% t4 ?: z& ?7 p是不是需要在DSP.CFG中进行配置
4 Z7 I& b! j1 ]7 J8 H我现在的配置为/ V4 a6 p. P4 J/ W

0 o# q% Q3 J) v2 f# R3 A# D& i/*
" n5 \6 S& j. ]% J0 s *  ======== Operating System Configuration ========0 B6 @+ }, w2 U9 U! j
*/0 X6 E4 h% }$ {9 B

4 s/ X7 c# d4 F* W7 D5 P/* no rts heap */- P0 t2 E( q  X- H, C: p$ `/ f1 ?  d
Program.heap = 0;
% K4 _( M& f5 B, d+ CProgram.argSize = 100;  /* minimum size */7 V1 N$ P- W* ^3 i- s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; U$ L# ?. |9 x! X! ]# Q2 Q7 X- z9 t. n
! r% e; H; X4 b$ d/* create a default heap */" c$ ?/ @) F) [/ F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: }/ n9 @3 `- W: |6 _- O- T1 Tvar heapMemParams = new HeapMem.Params();) b  o# i( D9 }" C- J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; \: n! x& r$ a
3 X$ \7 t2 N/ z
var Memory = xdc.useModule('xdc.runtime.Memory');- g8 O% [% r  v2 H! g6 d4 R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 m- P2 `" S) Q
- q' z& F2 ?) _
/* configure System module */5 z% s% s9 Z3 r2 Y' b% B) X$ F
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 c0 i$ A: E5 L/ U! YSysMin.bufSize = 0x1000;
3 U; U. r# P" C- j: kSysMin.flushAtExit = false;
2 V# C$ g* |/ d( ?, B* W* i+ g, E. @8 C1 M% y( @! p
var System = xdc.useModule('xdc.runtime.System');
8 Z0 F; f3 `$ g% }: r3 iSystem.SupportProxy = SysMin;
, n; V% B% A4 }3 r2 D, c. y/ V$ u! V- q
/* configure SysBios to use the lower half of Timer 1 */
( N. r! K. U' K8 _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) c8 S( ~, [6 `) f9 H# ~0 bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 C# e* [; P* w  C; w5 |; E. L
Timer.timerSettings[1].master = true;
* {* u6 R' P2 zTimer.defaultHalf = Timer.Half_LOWER;
5 S8 k5 Y7 Y  K4 H  K2 {Clock.timerId = 1;. A% M/ d/ c! m

1 F, j; B6 D) P: @5 a+ F
6 X% h1 n. _- u7 Y0 X9 q+ y/*1 X* c5 X* b5 v7 L
*  ======== Miscellaneous Configuration ========1 s5 C; y  f0 p! V0 \5 W9 R
*/
" I. a6 T( v0 Z& V! X7 w+ l0 N) D6 w7 x' B1 y% y0 ?
/* set default diags mask */( g, H% O8 W4 i
var Diags = xdc.useModule('xdc.runtime.Diags');- o4 s+ L" n( n% x
var Defaults = xdc.useModule('xdc.runtime.Defaults');; i) Y) I- `8 D9 ~+ s* d- w" I
# B% m& ?0 s. x- }2 \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) {. e, r; H3 B4 @7 @
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. x/ y( y: f4 p4 w( a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 O0 z: Q3 l$ O' ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: l' y! W' m4 ]5 v1 d% q+ }- E2 qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 M- \2 t9 x7 n0 }4 Y# @( G  y8 V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 w8 d/ N2 \3 b* B2 m  d) _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- Z6 D+ T3 |  o- ?7 n6 `: R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! S" F1 V. B0 ]5 V! zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 x" Q- t( {3 ~. Q( X& _- \: M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. ~, H5 b7 K, IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 @3 b7 l# E9 v2 n+ s  J$ p' x# ^' oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  J: T+ _) J9 F. W8 L5 PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! m# B: C9 F& m0 Y( c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! n! c0 F6 n5 S+ D* D4 ?1 D+ d- }" i( L  I2 o
/* override diags mask for selected modules */" u2 Q/ G5 L' `  T8 A
xdc.useModule('xdc.runtime.Main');  [7 a7 ?/ e: F5 B! G8 u
Diags.setMaskMeta(% z' j6 N6 R  T% W/ a
    "xdc.runtime.Main",
$ z; R1 ~0 U9 \: g    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ ?$ @- b4 v1 b3 G5 t& l" U
    Diags.RUNTIME_ON
7 [) @7 I" ]+ q! b" t" g+ U);
. T. W2 `: Y8 @- B: u
# M# z8 m& k8 _" K1 ?8 N! Mvar Registry = xdc.useModule('xdc.runtime.Registry');; Z/ E% h6 ~7 z! ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; ^6 ?( h! `6 v# U. n( ERegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. ?9 I) a, n; P+ d; ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 ^! t- ~8 i# D: YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 N) C, t- ^" S! c. N) D, s! p2 L2 j9 _5 K$ r
/* create a logger instance */  \7 [) E7 {7 _( S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 }0 o3 h6 z9 m3 Avar loggerBufP = new LoggerBuf.Params();
! h& G; ?3 J: K, }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// \8 v3 E2 A* c: e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; j7 |: ?: p% p) L9 q
) w& Z0 }) a9 P! Y) `
var appLogger = LoggerBuf.create(loggerBufP);; p" w# T% ]4 i& W; Q" V
appLogger.instance.name = "AppLog_Core1";
. K7 b( R- t# F' J2 h3 }( JDefaults.common$.logger = appLogger;' a" \) L- y4 O
Memory.defaultHeapSize = 0x8192;   
2 E. |1 G; L6 H7 j/ F6 q; gIdle.idleFxns[0] = "&LEDStatus";
6 ?2 N* Z( X6 [8 L( r9 L1 D: V+ GCache.initSize.l2Size = Cache.L2Size_32K;4 ^/ v+ x) D) ]! @8 b- R
1 ]' W( n! a; V0 W, W# N
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 23:16 , Processed in 0.042384 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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