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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 j0 X) N  ^; Y
  w. G7 e9 N* E# M/ X
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ t7 w* T# Z1 ]8 V1 b0 _) S2 I5 W% n+ `; i3 n# Z. C
其他程序段。。。。。
! d, n) z4 F. w9 I, b . U* k7 `9 K: k* ?1 E
   free(x_d);
0 I: F7 }  Y- v5 w! i1 e- W
* i& F0 G) ~3 z" }5 }/ n4 X使用DSP侧单独调试功能,验证动态申请没有问题,
) {6 u9 d$ W6 w) j& D( f, B& s3 L6 L' A1 Z* ^$ q3 z. V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 [1 \1 }; i8 t( K$ f1 ?  K
+ A/ W; x, v8 [& R5 J8 _- ]- u' \4 f+ t

" t0 @: {0 g9 L* |. F. G3 f; [+ v
- v+ {" m  B; C7 o7 g( Q+ X7 G
/ Q, G: |5 d: `/ R! ?5 |8 B0 _* t

5 z6 `+ K; E: x' a; v, C1 B7 B: @) Z8 r
2 t0 o) _7 e$ R0 y$ U/ O: l
* Z4 ~& [( f  d1 G& T5 x" o
% M" d/ N( f0 V! n& B8 P/ E) a" ?
: K' W" f- ^+ _) I- ~3 _# D8 @& \
分享到:  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 */
- P. J. N, a  m% p  _' PProgram.heap = 0;6 K* i! c. Q) a" h0 w
Program.argSize = 100;  /* minimum size */
& O" l# Q: c" NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
( J# X' j' A6 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' K/ @. G/ @. H3 n# k: ?4 ovar heapMemParams = new HeapMem.Params();
' v; S$ ~7 }  w7 c( BheapMemParams.size = 0x4000;
$ k. G, X" E+ T7 @  F3 R+ S4 |* a( r5 h- A  L& u  K' N# u$ n
var Memory = xdc.useModule('xdc.runtime.Memory');
9 o$ F  I9 ?: \+ Z& iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 b. T& s% }  {& N( y: W1 }; U" r$ v4 W5 m- f
我大约calloc  每次共计大小为5K*16bits,5 v3 I( N" o/ `2 t6 f
而默认配置才0x4000、需要改大。
9 p& k: r& ~6 d9 F& p. l7 P- _' }4 M2 |" s/ a" C9 }# B
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明; @( ~( f" C2 s- a( l6 S5 F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 i) i$ _. ]/ h6 X- G" S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; n/ f9 t  a0 K# v- q
/ s) P) t8 z: ~4 v( s5 c& I
是不是需要在DSP.CFG中进行配置
8 M4 w0 B" s4 g: k9 @, x我现在的配置为: F& C( i5 ]7 T$ E/ M! I8 t1 \. p

% W" B6 ^% f3 [$ z, v0 z( k/*
+ ]* D, U; [" o: F *  ======== Operating System Configuration ========3 H% j& j, J; a/ w
*/
$ O$ f+ ?/ k+ s. |3 ]  ?/ a2 b  I1 A( G% y3 X; V
/* no rts heap */
. C' ]6 J/ e0 P4 h% }Program.heap = 0;+ ?# R6 j; w2 {4 P
Program.argSize = 100;  /* minimum size */
" j8 q9 a, h0 I1 H8 A5 y7 WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 J# g9 d8 _- B

; J; F4 f4 L* L3 c5 A* t. {4 K; @/* create a default heap */6 E/ M" r4 h1 Z/ Q* f4 V3 k, S- P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  V3 k& D1 ^! @0 x- y7 k
var heapMemParams = new HeapMem.Params();9 }5 V2 t* a4 l, d" N: b2 I3 }0 x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 b7 @: V. w9 ]* `  \( z  s3 f* ]: ?! r
var Memory = xdc.useModule('xdc.runtime.Memory');
2 s8 A$ [- c8 N) L; S$ zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 A1 Z5 m. S  E' t! R7 b& \. f6 X+ i# L% ?: a% T+ {- ]% M" X
/* configure System module */
" S- R9 u: |0 _: w" ]2 jvar SysMin = xdc.useModule('xdc.runtime.SysMin');! j2 G$ ?; P) a
SysMin.bufSize = 0x1000;
" b" ~7 {4 {/ B- Z  G6 bSysMin.flushAtExit = false;! {: v% R; J6 B: O

+ \( H3 S5 T/ N/ evar System = xdc.useModule('xdc.runtime.System');7 [& F6 I1 U7 |) b
System.SupportProxy = SysMin;
% ^! d. t1 y8 ]# N7 J/ d
, ?# V) _6 ~  @( t+ W" k$ V/* configure SysBios to use the lower half of Timer 1 */
; p" x& m8 l# Z! N+ e+ wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 `) p, B8 a  @1 G  x. L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 ~+ o. v) t' h7 y' DTimer.timerSettings[1].master = true;( ]. e& U- f% d8 x$ f, F9 L
Timer.defaultHalf = Timer.Half_LOWER;
) H% `) h) w/ sClock.timerId = 1;3 `" P; r* g/ B8 Y0 K2 A6 W
  r1 q' e3 B+ A0 q& k/ {
! }9 A1 v- v* l2 _7 N: o
/*  X3 C# f6 W& J1 J  E
*  ======== Miscellaneous Configuration ========$ ]) v3 r/ S' c. V( D2 K) g& ^- Q3 s
*/
# M7 C9 l, f* _9 [8 ?+ `$ Y, \" r; d1 x
/* set default diags mask */. J- {2 C6 J% \$ C7 o
var Diags = xdc.useModule('xdc.runtime.Diags');
8 ?! L1 h9 a. s- }" ^var Defaults = xdc.useModule('xdc.runtime.Defaults');6 r% w+ k, d& u. a* D

+ `4 O" F8 x& W" n& r0 B3 h+ dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 }4 N4 l" O. B6 JDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& D  U1 B8 O) G" u" O" U5 g- s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 ~1 ?, j" {' \3 s8 Q. k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 S( L' B. M9 \: j0 JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 V1 {) D: g2 q+ ~& H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. D# j  T( f& CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 a$ X- f$ g# l" @' n- ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 B% Q3 c4 h0 j- R" C, J: `9 c7 L4 z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ E- H* g/ n9 w. ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 f& h4 [0 W; ~4 E+ bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; r5 h* N8 R' Z" mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# H) O; b; a7 P6 K* Z& fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 Y- i1 X4 {" z2 w% y* BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  d* o' s: h# N: g# q% u/ i- P2 ?& r0 ]6 H1 x: N% W
/* override diags mask for selected modules */! @1 I" W$ ^8 e, s# S* Y
xdc.useModule('xdc.runtime.Main');
# z! @0 z  |6 D  SDiags.setMaskMeta(
7 M& [- x0 q  O' n3 `    "xdc.runtime.Main",
( F6 _( w! h8 D6 {7 q" p2 L    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 t. J- @; g! ~/ t( G5 N* s- b) m    Diags.RUNTIME_ON  G  _. W% m: ]: j5 h5 u6 c5 r
);- K- t* t% ]$ i! S2 s; U

/ B$ a0 o! }. b% L8 h% z4 ^0 Lvar Registry = xdc.useModule('xdc.runtime.Registry');
% B+ l2 K: U; O! E: e  l5 CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  ?6 _" l! k' K; ~Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! y8 z/ Z* m1 s5 A% H+ S' i8 O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 r9 q- {& J3 J/ {1 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; ^7 e( Y  s" i( K3 }
4 X. L1 ~6 b: H$ j* K/* create a logger instance */
# T+ E  o! b" O" {- h; _" K& Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 ^: Q7 ^: B3 X/ {2 C7 W  cvar loggerBufP = new LoggerBuf.Params();3 T2 K# c; c+ h# C& S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* D% V& e- H! lloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ C7 {7 F4 r4 S! T" Z
# h  b4 c8 a3 J, E( Rvar appLogger = LoggerBuf.create(loggerBufP);# V! Q& w' {# b
appLogger.instance.name = "AppLog_Core1";1 Z/ U8 M/ q: X! Z. ?; j1 G
Defaults.common$.logger = appLogger;0 r1 K/ q7 `2 J
Memory.defaultHeapSize = 0x8192;   
$ y* ]" K" A9 `4 vIdle.idleFxns[0] = "&LEDStatus";
; \' I2 ^* s4 N6 q/ m6 o: JCache.initSize.l2Size = Cache.L2Size_32K;5 a  G9 |1 v4 ]8 g

3 d+ a1 `3 O* ^1 H/ T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 05:32 , Processed in 0.042162 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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