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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, v: L0 c4 j, I) I/ B
  h( A( I" E9 G( s- Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) J/ t: z- w7 {3 W' s2 v* t. E( O6 r' {( k$ C$ h7 g
其他程序段。。。。。  h  @$ d4 k5 {% m, Q2 y
/ g! W  W9 `, y; Z$ _4 z
   free(x_d);
  `# N; Y6 [  {* k, g! K, D( ~6 N' I
使用DSP侧单独调试功能,验证动态申请没有问题,  J. a3 D7 b: B

& t6 L" f/ u1 P, w$ \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 \* }- v0 u! |3 d
2 Z; H5 o7 Z* z+ L
2 u8 Z) N/ `% x$ Y

) Y# \1 `" h1 z* y) y' K1 ~0 h: B2 X( U. n( W' _" y

9 `. ^+ _8 d6 Q* i. Q9 V2 n
" w$ Y- B  [! Y* k5 ]0 j; L% ]% Y7 Z3 F( ]# ?; N
; z! P) k) K& F( O# ?

. |! ~- @: M- J! ^" X8 f+ b
" k- @7 M4 p, d# ]/ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' i* Z. Q$ e( m0 H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ Z5 e! `7 n, A0 N- x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  i: ?  e& `0 D1 A# k

4 v$ V; |2 |& F0 E是不是需要在DSP.CFG中进行配置
6 m& h2 A, u- L% h3 {. N( ?0 ~/ i我现在的配置为! F3 a9 Z4 u6 `' M

  a' y# h5 N7 J# {  }/*
  q8 Q4 r: I" [0 a) k' l *  ======== Operating System Configuration ========7 M5 a7 k5 x& N, ?; q" ~1 T+ _/ s
*/8 X& Q* i( I' j6 ?" a3 }
+ T8 m# `! Q& V2 r6 V
/* no rts heap */
" {- g; i) b  W0 u2 ~& B! {Program.heap = 0;( b8 Q7 G! Q$ [$ E8 a
Program.argSize = 100;  /* minimum size */
- z  X. Q( `- j/ CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& W7 Q. j4 p( y6 a( e( q. a
+ O" x# h" |; _4 f0 c+ g3 m! _/* create a default heap */( E' l2 r/ D. ]* L" G$ ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 q) K. ~! C8 F5 Y1 J4 e
var heapMemParams = new HeapMem.Params();, n7 E8 z3 X2 e
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& N% t- d& T$ ^6 k- Q  q- A; @& f1 V+ J5 ^/ S
var Memory = xdc.useModule('xdc.runtime.Memory');3 O8 t( g8 c: w# G4 P0 \# U% A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% t5 X% m- m5 @+ n. Z, ~: M

3 A) H3 z  [& g/* configure System module */
3 ?: B8 ?. o' S( I, Svar SysMin = xdc.useModule('xdc.runtime.SysMin');
: \$ P& s- |, |! QSysMin.bufSize = 0x1000;! x! \- E  V6 i: L+ c3 c
SysMin.flushAtExit = false;
. @+ E) t3 a6 M
8 U8 [- E. Y" A# g* n8 Q2 ~var System = xdc.useModule('xdc.runtime.System');
& l0 c& T) O2 O' D+ E0 \System.SupportProxy = SysMin;: h; Z  G3 ?7 m6 l
" \2 }* x1 E( l  g
/* configure SysBios to use the lower half of Timer 1 */" z% k6 A: M; d
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 r/ L+ H# w; l/ R: \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ E9 }+ x2 k! ]8 F; p( i$ L7 k5 YTimer.timerSettings[1].master = true;
5 M( \& d' B2 rTimer.defaultHalf = Timer.Half_LOWER;5 C3 A8 |- Q% m
Clock.timerId = 1;) u8 a% u0 _- Q3 A% H7 V

/ V& X5 c2 H$ i% X5 x. u, G- b( X  L; w* q  I% T
/*
6 K4 Y$ D+ M3 y# m# }2 z% D *  ======== Miscellaneous Configuration ========! v- D6 p' Y4 L+ V2 L4 e
*/% f, Y" a& @4 t! o' G9 O# f! U
/ H3 ]( R4 x! A' n) T" k% `7 `+ v
/* set default diags mask */
  G& j8 `$ G" ~8 c8 `var Diags = xdc.useModule('xdc.runtime.Diags');
1 u# a7 e, X% u  Mvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! y6 [. E' l' w+ k( m$ X( f" i3 w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 {! q) K& I/ T: V! xDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 L& y8 c7 `; sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; ~$ z; Q; U) u2 P7 }7 N2 LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 A: g+ L0 g$ h/ M2 S. NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! t; K7 O0 l/ j' K  H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  A4 w9 T' j, W+ g: ]/ b/ X; ]/ N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ ]0 g  }% _7 |. mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& Z" a5 o  A- M8 ^  a, u; LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 N' `6 T; x  S' i$ Y& @8 R" g& z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 _1 E- i8 ?# v6 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( D& P0 X0 u6 i8 n3 M/ D0 }7 NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 y. W/ u; m4 o9 CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ A" H# ~; A; m8 JDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 F+ R* ?9 s# F: ^. P0 E7 q4 x9 {$ B9 ?. V
/* override diags mask for selected modules */$ `( Z% I0 \( P  h: Q, ]0 c( b' j
xdc.useModule('xdc.runtime.Main');5 g' U8 q( B8 u9 e7 H
Diags.setMaskMeta(9 t! ~7 S  x0 S$ J' H
    "xdc.runtime.Main",
, j$ A# E2 z, G    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( ~) T! J( M$ t8 o    Diags.RUNTIME_ON8 _! Q' W3 v# [1 v, `
);  @, U/ M: P  d: ~6 j/ |

, x% w  N/ k' C2 c  V8 ]var Registry = xdc.useModule('xdc.runtime.Registry');
" W8 r- Y' ]7 U8 K% K- K. B: s& ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 ?0 v! S7 |- G# Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% m6 F5 N3 x" Q4 ~, u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 {- g! ]2 k$ r+ I* G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; x6 _7 @' O8 D! w
- m( q4 `4 L1 q3 U$ A3 B
/* create a logger instance */
+ \! {  |4 U  n* k$ Y2 C- avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; X2 v4 p0 `, [4 e# D' W7 J7 Bvar loggerBufP = new LoggerBuf.Params();
: Z% A; o7 @& U. T1 F* wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ i1 }9 c! S9 L. [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* c& I6 m2 i+ l4 ?2 d  ]8 v
9 g5 H! [8 Q+ h% R2 Yvar appLogger = LoggerBuf.create(loggerBufP);5 c& n1 [& [  R: E$ {; _& Q5 p* x. l
appLogger.instance.name = "AppLog_Core1";
) o( A9 t8 u# ADefaults.common$.logger = appLogger;
% ?) Q. M7 y& k) IMemory.defaultHeapSize = 0x8192;   
) m) s! J8 r6 ]% [* f5 O; `5 OIdle.idleFxns[0] = "&LEDStatus";+ a6 C$ Z3 i- ]+ A( e# w9 ~
Cache.initSize.l2Size = Cache.L2Size_32K;
2 {# F; l+ C0 z
6 d9 f; ~  V& m/ Y0 ?0 Q1 a9 a! Q
回复 支持 反对

使用道具 举报

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 */
6 p2 H  }% h4 ~/ B7 ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* D6 U" L' J; _3 e
var heapMemParams = new HeapMem.Params();* J8 O2 m2 j* f0 K& ~4 T
heapMemParams.size = 0x4000;% n8 y3 @! q+ R, `
( F. |7 C3 K( a' M* s) l
var Memory = xdc.useModule('xdc.runtime.Memory');% g- a( E; M5 m% `! K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ F. a5 D0 R& n6 x# s
1 v5 T2 V& K& D% P2 S我大约calloc  每次共计大小为5K*16bits,
1 S1 ]$ j% j! a而默认配置才0x4000、需要改大。/ \, z. J* E$ g- u2 I- S

3 ^9 ?" S- [1 G# I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ v2 p, i9 a3 j: X+ d7 u+ O: [
Program.heap = 0;
' u) q$ z; R' K& h# D/ ~Program.argSize = 100;  /* minimum size */4 }$ T7 N: E. j% g4 L" z' l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 19:12 , Processed in 0.046990 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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