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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! a0 W' z# z2 G/ D: e) e3 `
* e$ [2 h( P$ ?0 @+ V# O/ V" c% G$ W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; b3 [. y6 i& W: ~- m

* E7 T- f0 H- k$ K# T7 a( g其他程序段。。。。。
7 F. z: C8 c+ I+ @1 _0 k. M ' b- _% g& o( `6 ?1 s
   free(x_d);$ R6 n+ ^* z5 d: J$ `/ w

0 P+ t2 g' T8 I* n- b  F使用DSP侧单独调试功能,验证动态申请没有问题,
; v, z7 n4 @/ Q% c* Q4 @$ }& @! L& I  M& S* x$ _2 M4 l0 E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 d& b: I* E* d
; O' S' ^$ H; o: p" d

- {/ L! K6 ]8 \1 ]$ w
0 c! j! m0 o4 H& i  q' G6 d7 u& J; ^6 H
, _1 W" B1 G4 F8 X0 t( h
2 ^, b9 v8 S/ p9 b# T

- D9 I# B% O1 |$ z( E
( ?& }- w( V+ }% K$ y  `
! W' F/ K( j* k3 B0 t+ c- n. Z, T( d" k  z$ _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 P, V1 g$ m0 y4 N' \  {3 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 A; U2 a; S( P6 r/ R: O, T; J0 |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) V  z1 G' T) Q" r& H4 q! ^
( B! c7 w% T. S4 W( L7 G5 p
是不是需要在DSP.CFG中进行配置2 s0 ?1 X, l/ W9 w- {( U
我现在的配置为6 J: u' X9 ?* Y0 \

: ^' d% p$ w) i. r5 f/*
# }( ]! w: j2 B5 l *  ======== Operating System Configuration ========
: |$ V( i9 \* f; ~* L: J5 E */
& {$ x* e) E6 Y% i* [6 |0 n
# r/ c. ]- M" X: U. l% t- a/* no rts heap */
6 f: Z% e8 F# J- y1 \Program.heap = 0;: {! B& ^( E: |% {" T1 @
Program.argSize = 100;  /* minimum size */
& H6 J1 o, X1 _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; f& p/ d; p$ v% R' W
# J" _" ~4 g4 S0 x& l. e8 O( |/* create a default heap */1 ]: U5 m8 ]1 y, b( E! j) c# F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 Z' ^- o3 [7 n4 ], ^var heapMemParams = new HeapMem.Params();: I& V  J$ u- X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" T9 z( N9 @! e9 O7 ]

4 H, f4 d  V- g  z) c
var Memory = xdc.useModule('xdc.runtime.Memory');
( h7 T; X4 t+ |: I! O7 L* eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% V5 n7 x( i# u6 t
9 E; d8 Z# }! Z  A3 g% o3 u/ y) s
/* configure System module */8 U. z  v) [4 M; ^6 a
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  ]. Z( B# y/ }  _0 ?5 j8 TSysMin.bufSize = 0x1000;" K# A) r4 r$ U# J# v
SysMin.flushAtExit = false;+ Z0 {1 Y- I! o  o% U0 V9 x4 Z

. d# Q. x7 Y8 A# d5 k- f3 Hvar System = xdc.useModule('xdc.runtime.System');8 p" O$ b! ^4 W6 K
System.SupportProxy = SysMin;6 ?: H3 G$ p$ q" h
- J6 T+ E$ |4 D) L& H
/* configure SysBios to use the lower half of Timer 1 */" g5 l' F) D9 ~( K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 d# N' p( [0 t2 W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ y3 ?) B( N& k! _1 uTimer.timerSettings[1].master = true;' s/ D% T7 g/ P
Timer.defaultHalf = Timer.Half_LOWER;: K/ s7 b/ O+ N! F% X) q& b3 B" L* Z
Clock.timerId = 1;! r0 J( \7 _9 ~" a2 X/ F
/ o2 x7 [' O/ J* ?1 d* T

: c* |7 Z) D4 t8 B! ?& T/*
1 w0 r1 c& l- C- y  i0 w& B *  ======== Miscellaneous Configuration ========
# N' W3 X  v" n& ^# O; {7 E- w */- G' _6 ^0 V5 x/ @# e0 v) x. Q9 ~4 ]
2 D( P7 j% j6 z
/* set default diags mask */8 j& i+ h3 \4 t/ z& D) p5 a
var Diags = xdc.useModule('xdc.runtime.Diags');: M6 {# e! Q2 H7 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 d) g' x. F+ {0 l# ?- i% ^5 M
6 X" G7 @4 X  M% x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% L' \; G" ^; X' @* Q# Z, V" U& j" V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 I0 i! Y; ?+ b8 k% p1 F0 F# y5 YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 x  x; W3 R& r9 b. v& F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 U% I% }) u2 I, ~4 s2 qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: n- R# c4 t; A+ V0 T+ oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 T8 ]5 Y$ \' J4 v" v% i) I6 S7 `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 q5 b% v% W0 d5 F* r8 B
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) j" z2 H. y/ [& `# q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# P. [; |9 y# K$ O8 qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- A4 S4 u' t0 o' aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, @5 V* @- r; Q: V/ M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 M7 W7 i5 L# b" m2 m# hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) @7 Q2 L8 _6 [8 y  RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; l" h. K" _( }0 g7 S, |. i7 s- g) z/ n" G  R% m1 q6 c' y
/* override diags mask for selected modules */& X* y$ {; ^1 @2 {# k
xdc.useModule('xdc.runtime.Main');& x, y  P: k! @5 s# k: ^4 o
Diags.setMaskMeta(( ?# l: ]+ i3 \
    "xdc.runtime.Main",
$ W* n$ h2 T3 l8 H% K    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 N- U2 ~9 A, ^0 l: {' f    Diags.RUNTIME_ON* h3 D, X: d- a. T3 k1 M6 B: [+ ~
);
# N& {3 u* ~! r% J7 |+ I( l4 I6 C7 w0 Q
var Registry = xdc.useModule('xdc.runtime.Registry');" S7 N+ @; g  N: F# E, S/ y9 G) U
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' f. L3 j* B, ^1 [0 f# s7 X% T1 g& R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* }* j; N# B4 k2 @3 }: `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' m4 s/ ?& d' R, G  s8 w( ]' fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  i0 d3 q7 U+ _$ f0 [
- Y! U0 \! L. o) A3 p/ O" b9 L- ]/* create a logger instance */
9 E/ C' P/ G% Y$ D6 {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% c' Q; A; O1 F- O' B7 d  dvar loggerBufP = new LoggerBuf.Params();
1 C8 k  I; K4 @/ o" {- \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; E+ w! Z+ _/ T% E$ g; |( MloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 [7 g3 H4 I. [& ]
- H! y9 u7 \- @4 \
var appLogger = LoggerBuf.create(loggerBufP);
; l/ C4 l" M) E7 i- gappLogger.instance.name = "AppLog_Core1";
$ S9 W7 p+ a  j* Y; G1 CDefaults.common$.logger = appLogger;0 I% E4 U( r0 Z( m/ T" t
Memory.defaultHeapSize = 0x8192;    6 o6 ^: \6 w7 i% K
Idle.idleFxns[0] = "&LEDStatus";2 k. F$ V* _$ ~3 \1 s$ I6 n
Cache.initSize.l2Size = Cache.L2Size_32K;+ h. g2 O+ M  B
2 m1 y+ q8 R6 N5 }
回复 支持 反对

使用道具 举报

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 */
! o3 n4 h; D+ Y$ t" K  Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ Y& b+ k% y4 fvar heapMemParams = new HeapMem.Params();
! K( h$ y6 E+ w: o8 w' B. w- zheapMemParams.size = 0x4000;
9 i7 v3 Q: ^. J3 }4 L- t( W7 A) ^2 ~7 d' R6 X- C2 C8 J
var Memory = xdc.useModule('xdc.runtime.Memory');9 ]- C7 p2 ~. B1 e3 t3 _; ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ r% b( j$ J( h- U* a5 D% W8 M4 P: e
) H* M2 g/ z- h) {& t1 u我大约calloc  每次共计大小为5K*16bits,+ B1 U  `% {$ W0 j/ a0 d: a1 q
而默认配置才0x4000、需要改大。
+ g" a4 o$ [( J0 b# U' Z. o3 }$ I; i/ d. J, R! U% e- J4 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ c; _( M9 B' I/ \: FProgram.heap = 0;
( C, X* M( d6 a5 \& R, qProgram.argSize = 100;  /* minimum size */
4 O2 m. b/ u$ j$ W# S3 FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 20:03 , Processed in 0.043008 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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