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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& Q9 d+ ~- @0 P# y7 v6 Q" a
6 Z  L" `* d% {' v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. L: L1 f9 ]( ]( V) W6 P9 Z- W8 D7 G9 d: |( t' h& N, d1 O8 f- M
其他程序段。。。。。
+ W: F  t$ Z# X. ]( l( y 8 A5 g+ Q6 |/ u7 X" |
   free(x_d);
9 L) t% d. r* P! Z
9 ~8 U0 {* s' p使用DSP侧单独调试功能,验证动态申请没有问题,: Q7 d/ T* i0 N& }3 O, @0 b

# e" b7 F) p1 M5 T5 c0 \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- @/ d8 o* q' m, k, t7 Q

* \9 O1 M& _7 O9 h% g2 U# I7 e) M8 _- @/ T

, }$ v6 E, z3 t, \5 G) ~6 ?( f
- Z# j9 W% O: x+ b5 h2 n4 r& n% R8 V9 Z. `- Y  t7 e* J

# d3 f7 k& |* y, a
8 X2 [4 R7 a$ `
) D% @' N" o& i+ f
3 X* E7 k' h4 V! M5 U
+ f5 X4 h% g7 b7 V% l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 y5 g" J& h+ L- R* N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 Q" X7 C3 g, I, X! f0 U* `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 x; L) O7 P9 u7 ?, C

* H$ y$ k6 B3 @6 b1 [- ~* j是不是需要在DSP.CFG中进行配置6 y5 \" O  z( c5 K
我现在的配置为
( m2 p4 C$ y* f8 s  Y
: K$ T- M/ o" U* O% X/*  _0 y. J- ]' ^# C9 i$ r
*  ======== Operating System Configuration ========# J4 m1 {6 e* ?# `/ M: v% i- N
*/
& l* S# X7 O* ~8 [, h2 n6 d  ?3 q$ a$ H# d
/* no rts heap */
, B; d# G/ u$ `' CProgram.heap = 0;6 B% d0 p9 h. U" L
Program.argSize = 100;  /* minimum size */
( r6 x5 {) B) r  e) V* c% I4 RProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( |: ~' \9 y8 g, Z2 q
' o! c' O& I0 Z/* create a default heap */
& K- t7 K1 u/ W- u& xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ g9 n+ C" r/ N3 L- F3 ^var heapMemParams = new HeapMem.Params();5 R. x1 H" K! n& F6 N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 z7 E5 j. B: [4 i& `7 H# [* T! O2 ~- Q4 c5 l9 h
var Memory = xdc.useModule('xdc.runtime.Memory');
' C7 U% O1 y) L6 I+ d' j, g. p: lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ R$ S4 t" x: U$ z% G7 M. O( v6 k5 Y7 ~9 t. Q2 l! s8 a) s
/* configure System module */, H6 G, h9 S/ l' \& V
var SysMin = xdc.useModule('xdc.runtime.SysMin');: }% r+ X0 a4 K2 b# b+ D
SysMin.bufSize = 0x1000;
8 p# M5 I6 V, ^, xSysMin.flushAtExit = false;( a& n% \: e0 k5 V
) D. I7 }+ A) S, P0 X9 C7 b5 R
var System = xdc.useModule('xdc.runtime.System');( |% X% ]+ `7 @$ t  p+ N
System.SupportProxy = SysMin;
" U; B$ t) I) n5 ?
8 _; Q# j# [/ ~% G1 e+ {/* configure SysBios to use the lower half of Timer 1 */
, E+ ?' t" }, J" x* X( Fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# ^! @) ~7 U, I# f( W7 G4 s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" o5 t$ f3 P$ ETimer.timerSettings[1].master = true;
5 J9 @( _; ~0 s9 uTimer.defaultHalf = Timer.Half_LOWER;8 r5 t$ u5 O9 W, n6 v7 @
Clock.timerId = 1;
3 r* o0 Y' \% ~# D3 z$ R' D) H* B" ^' v

: M  S2 N, w9 @/*& z+ P3 D3 S3 ?6 ~0 ?7 A
*  ======== Miscellaneous Configuration ========
7 @- u' _! q& H( z */
$ c, P& N+ ?8 f5 {" p  k# v1 q
  {( ?5 m8 K5 J/* set default diags mask */
- r, e# X. t% D/ T& O! Vvar Diags = xdc.useModule('xdc.runtime.Diags');
  P' B+ e' E2 E$ _; Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 P/ i' T( }7 K9 h/ t2 y" O" t+ w* K7 S/ o3 P! r" v# L/ w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. T( s  V+ d6 D# P. n4 ?/ v/ kDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* C. K/ A- }+ `5 ^0 H1 k$ R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 I, O' Q+ ^# ]/ aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& R- f1 Q% M5 l# ~5 K$ aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  H/ x7 z0 s* \0 ~# S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# R9 ]% \" ~' g- s! ~: j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 W: c7 @7 Y6 f) A8 R. FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 Z9 L2 t8 n, V7 d) \" d9 t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' w: m$ W+ F/ L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 T3 S/ |. ~; b" {1 B. RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 q9 R' ]; g5 t# [' c3 c! [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( U9 l; B) H5 h& m: X9 [! {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ S; m9 ?% _  E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 }0 f$ ~0 _  S: e  @0 y
! A; y" H& H4 E% G- J/* override diags mask for selected modules */
$ y# S' M% y0 txdc.useModule('xdc.runtime.Main');; Q' v6 |% S, g% `0 o
Diags.setMaskMeta(
! c5 v. h7 r: \; T    "xdc.runtime.Main",' |$ H  F5 t- q- v7 e6 X; T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- r: H2 d4 Q, P8 Q    Diags.RUNTIME_ON3 }- \5 m* {5 w4 Q  J
);" C8 m* D$ I! t1 D/ q- f
' I. E/ f) O: S" j. r. {4 T
var Registry = xdc.useModule('xdc.runtime.Registry');8 G5 k3 K5 S0 W" `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; ]. k& `& ?9 V, l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* w/ |) I' M9 {# F" W+ q# R# w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, D7 x1 {0 z  s0 Q5 n- BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ d, J. p) L& C, _, s% P% Z) D0 b) Y$ b: ^
/* create a logger instance */. d5 }# y! q1 D5 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  V( l& U- {/ A3 r7 c/ [+ t
var loggerBufP = new LoggerBuf.Params();) v5 R& A" I4 f5 i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- |" ?( f5 Q/ _: X# M( h5 K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 y; m3 k' S% F! X& ~
3 P! {. V! D- o) Y2 P3 z1 U& Cvar appLogger = LoggerBuf.create(loggerBufP);6 l) H, t' q5 c$ ?# y) C
appLogger.instance.name = "AppLog_Core1";
4 @1 U# w. p, ]' N2 j5 [7 F3 \( EDefaults.common$.logger = appLogger;
! W; D) R, X! W, \Memory.defaultHeapSize = 0x8192;    - H+ d4 |6 G" h4 @, }
Idle.idleFxns[0] = "&LEDStatus";* U; H' n! }# [* d/ B$ O
Cache.initSize.l2Size = Cache.L2Size_32K;
9 c% F8 V6 T7 R; t" E  o/ T. K* U. K$ j; f  m- h
回复 支持 反对

使用道具 举报

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 */  R* G5 g  e3 q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  l1 i1 r' P9 H5 Q. Y
var heapMemParams = new HeapMem.Params();; o9 r' S% j, z
heapMemParams.size = 0x4000;8 R5 K- U6 e" W1 E# m3 s; X( {9 K$ r5 w" y

: |1 W0 o& W1 ~" a; Mvar Memory = xdc.useModule('xdc.runtime.Memory');
) H5 {2 O1 `: Q8 tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 E6 M( w* w/ a* j4 I8 f! K" Z- I( f4 f0 b
我大约calloc  每次共计大小为5K*16bits,
8 h1 l* [- U( k) D6 t而默认配置才0x4000、需要改大。
  j" {0 r3 ^1 W# R
; z% }' W" g% _1 Z0 P  `; o2 F8 {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; o5 T! j5 _% t5 B" V# L5 z
Program.heap = 0;
0 [% ?' j5 V* U' K+ ?' V) ^Program.argSize = 100;  /* minimum size *// m& t$ f$ K# N" O# l4 I
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-15 09:19 , Processed in 0.042544 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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