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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 s4 y; l5 I# F+ d

% ^  V4 V8 V) |& e$ O9 R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, b$ O7 ^5 }! T9 o& H. B0 u; k' M+ }- w+ k, \  k  B( G
其他程序段。。。。。
2 d8 f" J7 ~' W6 J; B
6 x' z, Z8 K# C) T   free(x_d);3 J1 [2 N" a6 u4 u$ e

0 s/ u! L$ ~. Z. B% H使用DSP侧单独调试功能,验证动态申请没有问题,
. K) J* D- S7 d! I& V
1 r% n+ p& @% n+ C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 N0 j% ]/ d0 w' g8 y# {
) M" G7 V' d/ \: p

4 s* C$ {3 t$ v* X6 V( ]* J* i; G
% Z4 r% O5 m- a
3 f+ P. _% _3 m8 b7 r& V
5 C: S5 V8 X5 [  [3 V1 F* G" L4 W- }1 q1 S

3 G& O  B* D2 K; h; ^* p2 h
8 e: ^1 p2 ]7 u% n% m9 Z
, |& o& v/ ^5 a) x% e/ j5 A. I4 t. W
; T/ p! L8 {* V. y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 j  T1 d. X& h- o% t+ A我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 |9 @6 N$ Y9 C6 m  a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- w+ ^# y) D& v4 X

5 B( b+ i3 P& g( H是不是需要在DSP.CFG中进行配置6 P8 B1 k4 G" c- k+ D8 Z# K5 F
我现在的配置为: I: Q7 O: ^1 C

8 O! n% `2 m0 D: B4 Q, M: X' S: O; b/*- z) z8 k. d5 `1 R$ A/ X7 Z
*  ======== Operating System Configuration ========
4 @) ]3 s6 p% v5 u2 c */- E+ |9 u2 j" N; @
% R6 P0 C& j8 {; k
/* no rts heap */
5 q/ \* @. I6 N+ m- q! b8 hProgram.heap = 0;9 G5 N( {1 A! F8 \: T
Program.argSize = 100;  /* minimum size */& j4 T- Z$ f$ M' I6 Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 ]$ U7 y$ E" m- J

: ^, ]8 |5 W: i. |" {/* create a default heap */
# h3 _" m" N/ V2 e, j$ Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  b. f" t5 [! {var heapMemParams = new HeapMem.Params();
# _, q0 u# t) ?# K6 \3 U  p# |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( s- ~/ i: I& q  Q& E; u8 D# _
* q: O) J6 V0 b+ |( |# Y, m
var Memory = xdc.useModule('xdc.runtime.Memory');
) p) {/ E9 U; ^9 t: ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 }2 {: O- E: J% g

0 M; A8 [4 Y8 \: o% E1 j4 Q. k$ _/* configure System module */8 i0 T6 w! V) \$ C
var SysMin = xdc.useModule('xdc.runtime.SysMin');) y* @7 i1 h5 r7 l. q0 y
SysMin.bufSize = 0x1000;
0 t' U3 _/ Z0 d) H' WSysMin.flushAtExit = false;8 R  T4 i9 Z2 r# m

& w! n) v% A8 T3 f6 b' C4 |var System = xdc.useModule('xdc.runtime.System');
( x. c: o- N9 B+ CSystem.SupportProxy = SysMin;
- T& E+ k: |, O( f% A. j- N: U$ S8 a' ]! d' h- {- ~" E
/* configure SysBios to use the lower half of Timer 1 */7 l; y# c9 `6 q. @5 b+ g6 d  b
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. E' R6 j# C/ @6 U7 H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- y4 I9 W0 @8 s4 j5 n  U4 ^
Timer.timerSettings[1].master = true;
6 f# j& V. Z! a1 E* @7 f3 XTimer.defaultHalf = Timer.Half_LOWER;6 N: k9 G# O- v
Clock.timerId = 1;. Q. c# X! N' Q, F& V9 `* Q
% y" h5 Q  o3 x! }8 p

6 Y- S" _0 Z0 ]2 K% w- E& l5 f/*
. i) P$ G& v3 ~; O( U7 Z *  ======== Miscellaneous Configuration ========
" {1 s2 z; W- Y; N% g9 T */
( j" k& u6 \5 N: ^! u. h
) I, B) B8 [! ^' B# Q/* set default diags mask */8 p# I+ v+ Q( h3 \
var Diags = xdc.useModule('xdc.runtime.Diags');  }7 t& A( K2 g- x
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 v4 D3 u1 I/ O7 l- P6 u
, \2 T- L( \, i3 b/ a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 e7 \' o! t9 d# O) I* x4 U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, P! `8 M$ k! s. h0 Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 B$ U- x- z8 I& O& x( UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 L4 R( c' O& J6 BDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, a' K2 r. U4 h
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 {: r" |/ x% Q/ c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, M+ @) I; q5 b  w4 Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) T0 J) r' d" [* j  E0 p% ?. U! t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 l0 i8 a/ I$ l" U/ G- f$ T
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ P; S& c$ P' xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 h% a6 \- I$ t1 ~' ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 O7 I- E" f. N+ Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% |- M# O5 J% n% E8 P! }) K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 M- e- \% q* j2 d3 a5 e) k7 a. w% P
/* override diags mask for selected modules */! z7 F2 y$ b& E1 }1 I- m
xdc.useModule('xdc.runtime.Main');/ t) ~5 b- i9 |) v4 |
Diags.setMaskMeta(" \' {/ w" l3 F% Z; `( }6 ~, M: F
    "xdc.runtime.Main",
) `4 N2 J" A: ]$ U3 S, M    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 K8 H" w+ m! G: D, W" j: }2 d    Diags.RUNTIME_ON
7 O; A. E7 j& ?. c0 l$ z3 ^: j);0 H* B. p/ F+ q+ t
9 W2 O  B" F$ |' \9 b, r0 ~) l* c3 [
var Registry = xdc.useModule('xdc.runtime.Registry');' Q. c; Z" Y5 S6 h# d6 E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ u8 H0 P7 x5 M! |0 ]- z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' m: d" i: ^! _3 y& Z: i9 ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; X8 B" O3 Z8 D7 b4 h3 V* WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 L. e$ s! l1 g, B# H4 \  B8 i+ v6 S; t( E8 j
/* create a logger instance */3 p" w( t# ~7 G8 P
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 Y! m6 N/ j3 k# o
var loggerBufP = new LoggerBuf.Params();
# i) M) }, z' m. K; c& I: QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 i& o. L$ a( ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! t/ i. A0 t7 \3 z( ~
! l& v6 X: ^* e2 q- dvar appLogger = LoggerBuf.create(loggerBufP);' m; h( O) H& K8 V- X& _
appLogger.instance.name = "AppLog_Core1";3 D4 U# N, b! X4 V$ }# B+ J" _
Defaults.common$.logger = appLogger;
, ]( F6 C* K8 W& ^* L* M+ RMemory.defaultHeapSize = 0x8192;    3 t% d- r) ?- t% I' Y
Idle.idleFxns[0] = "&LEDStatus";3 J; g3 u6 E' z1 N$ }& @# U3 H
Cache.initSize.l2Size = Cache.L2Size_32K;( O. T0 R4 e4 G6 J3 Z
( m. A4 t7 H5 `' 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 */
# G* V/ k, s5 F1 _2 s+ N4 P- R1 C5 f2 Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 O, g3 [8 e8 P4 ?/ ovar heapMemParams = new HeapMem.Params();8 o8 ^2 z6 K' C4 V9 Q
heapMemParams.size = 0x4000;" V) V; e: q+ H1 j& r1 `& d& M

( y  P& z% K- Tvar Memory = xdc.useModule('xdc.runtime.Memory');
- [# `. c3 x1 [( ]3 N' [$ ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% K" J1 A0 a, i+ l
  r9 w, C' N- V" F+ i
我大约calloc  每次共计大小为5K*16bits,# X/ u7 t; Q' h' m
而默认配置才0x4000、需要改大。# h# z5 F5 Q) a# o7 \  `

1 Y. l( p) m9 P2 {0 {. r( {% E- d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) P; {0 A, S8 b& p% K* kProgram.heap = 0;  k5 z$ W+ |5 Y0 S) c* F/ X
Program.argSize = 100;  /* minimum size */
3 `, N1 d% ]( E. ]* m% @1 I1 GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-14 07:30 , Processed in 0.052674 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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