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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 g- O: W: u, A, {
3 q. j& z  O6 i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& q' @( S# }+ _" E% j8 k9 k6 ?- P; `) @! I9 W8 T! O- N, P9 T
其他程序段。。。。。: m- U( A- g" M7 I( _  T2 g

0 @- o' W" }& Z# n8 X   free(x_d);+ R% b2 T5 X! L) Y" V4 j
, Y$ V, M  G# j" p9 Q
使用DSP侧单独调试功能,验证动态申请没有问题,9 T6 z$ i: k3 X! }7 N) c
$ y8 c" N- U0 E2 [2 M! u- r  U- o% y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 [% ]1 v$ r- i5 [

1 p* G4 m# q7 [! Q5 M% Q" b7 ^- O& {/ J

2 e! |" ~' R7 @6 R# p
. v: ]8 U# e' {/ k- h4 V1 e; n. o6 }# D  `
5 l% W9 m' K6 k. ?

8 F, A. q' x- R9 W, k( w0 q" W
) k* }+ i7 F, P( R5 e
$ L7 l: }: h' ^3 [# R2 }
! h4 |0 ^1 B# s$ \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ h% H0 d; C; i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- W: {) j) S- x7 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ k: `/ l8 w5 g# @" _- j; ~) H

1 r% _3 A) b, S  I6 J4 w是不是需要在DSP.CFG中进行配置
! k: O. B6 B, P: s- U我现在的配置为/ q) O8 i: v+ X. a% c8 X6 c  I
9 `: v9 O5 a/ D+ k% U
/*
# C0 ~' N/ f+ S+ n9 r  \ *  ======== Operating System Configuration ========
/ Z6 E" K! W  S$ y */
- G% u$ C8 Y( y. C7 [* K: S" `
/ ^' a2 C" F0 d3 A  a* E/* no rts heap */
5 Y- [5 p% p  x* t+ \Program.heap = 0;9 A7 @' m& j1 X3 x0 j) U- ]
Program.argSize = 100;  /* minimum size */
% M, l% i; w% z2 i, R$ f# N: WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% R1 j4 d* C- }% M7 O9 q7 v( s( s

' t; O7 N$ Z+ g$ M" Y% j+ n/* create a default heap */: v% z: _% b7 x! R$ {: [. x. v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* x( N4 o# S, h# B( qvar heapMemParams = new HeapMem.Params();
" f, E; D: i' X$ N: N+ n0 @. mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) w9 ?0 ?0 n. W& n0 V$ o

) C* J  |% Y: f  ?
var Memory = xdc.useModule('xdc.runtime.Memory');3 Y; B2 G0 S0 u2 A; r1 h4 J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 N$ X% Y1 o- b* I- j+ G  f2 k
5 u! X( c9 \  H& a/* configure System module */
# `& A/ L5 y: b8 Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');/ S9 h4 O) _) }) r9 F  O
SysMin.bufSize = 0x1000;
1 _1 Z! G. D  _+ _' gSysMin.flushAtExit = false;
) n- U2 ~  `/ @& P( p
  x& E+ ~- @4 O5 x) Z3 Tvar System = xdc.useModule('xdc.runtime.System');( s5 ^- x, ?1 I1 v( H
System.SupportProxy = SysMin;+ m/ G( g6 K4 J9 M9 T2 u

" X, ]) ~5 o; h: X- q- I" F' g/* configure SysBios to use the lower half of Timer 1 */
( m7 q! s) {/ k$ u+ S6 O9 r- Y4 A! [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ ^; g4 H" _2 i3 O5 dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; V* `% _4 d( q% o; Q5 `8 O" u
Timer.timerSettings[1].master = true;
: y( }* q/ j! e6 U# r+ ?$ vTimer.defaultHalf = Timer.Half_LOWER;
; ~8 {( o- ]5 n  z9 CClock.timerId = 1;
* v3 S# {! u7 ?( P( F" q% U1 f2 S( \5 R$ r( ?- n( ?, f" O! c

. K1 U7 y+ u% v6 o: {/*$ q; O# y. ^0 N
*  ======== Miscellaneous Configuration ========1 ?# Z# R3 [( |
*/+ l+ F4 H& h2 l* N' n8 M/ i; W

* E5 A, o2 K1 E3 S% m5 A3 c/* set default diags mask */6 u$ r5 J: ^, m9 C% a
var Diags = xdc.useModule('xdc.runtime.Diags');5 i, ?6 h1 g: R" P9 f7 D2 T; P
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 P7 n/ L4 u. i4 ]$ H
) b: I+ u1 U1 ?% l7 L# U) J3 NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 Q$ o3 I: Z. G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 K$ s# X5 p  j, y, H5 Q' {$ |. S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! e3 g9 O4 `+ t& y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( Y/ ?# T. ~9 k" d% uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 ]% j' P4 K! Z! B2 aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* R5 {! A1 t* t2 cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: K) e+ ?/ l$ }$ b6 f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  T- Z$ m/ z  b8 p9 P. K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" k1 j: z/ ~( h% b# z0 {$ o: r6 qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& J' D5 }5 ?$ ^
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) f* h1 a; T0 j+ g! x/ A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 k0 {! a" e! u2 G. A# R5 O7 XDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 T2 L* v0 s8 u, x" C9 `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 K6 ^& D* ^1 d8 T5 g, u
; a7 d% F0 Z4 \7 Y2 x4 o; p% r) W/* override diags mask for selected modules */
' w& v) O- v% c* m7 ixdc.useModule('xdc.runtime.Main');( S9 R' M6 B% G
Diags.setMaskMeta(  L' z( g0 [, G; G0 o
    "xdc.runtime.Main",' u. E! X! Q: H& d! e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 n$ E; V. P& n0 n3 C  @( H, u    Diags.RUNTIME_ON
3 B; l! [* g$ R5 {/ r) C* E);
* D/ i; Y3 ^: F7 g5 S( w( w# q6 g' V0 w$ S! @1 H1 p
var Registry = xdc.useModule('xdc.runtime.Registry');# A9 M. i; f% ]& o4 m# _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  J# m# Q3 D! j2 w' w2 l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* s9 x7 G. a5 ]. G, \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 k+ M# o" Q) U5 |# f+ v0 J% M, F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 I* l& l* D8 r( o  u6 L- ~  a2 N: e1 W- Q% L2 F1 _
/* create a logger instance */
1 l% p( e9 [/ `var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* T% e  ~+ i( x3 a9 y3 P2 tvar loggerBufP = new LoggerBuf.Params();1 ?! l2 Q$ Q' o% K$ ]  t! n0 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; d1 X2 e/ e% u6 Y/ l" V/ y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  f( O2 q. A& X+ l0 i* z
$ [6 l( q) a( F: ?, g& |var appLogger = LoggerBuf.create(loggerBufP);0 n8 {# K  o1 `% v: C4 A$ A8 {
appLogger.instance.name = "AppLog_Core1";7 U) P( U4 e. y
Defaults.common$.logger = appLogger;
& A2 z: Z( }( J" ?1 ?Memory.defaultHeapSize = 0x8192;    " c, K2 j5 a2 b- g! T6 S) D
Idle.idleFxns[0] = "&LEDStatus";
8 P9 ]7 d8 K2 \& v0 ZCache.initSize.l2Size = Cache.L2Size_32K;
, b  J4 d5 ?" ?8 w  u
  L# w. F; c/ j0 t7 G$ E
回复 支持 反对

使用道具 举报

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 */
) O8 c" e$ @& o2 ]7 o* e: Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. G5 d  ]9 |6 |* ^var heapMemParams = new HeapMem.Params();
- R$ H, F7 h$ s; x; i5 }' v6 D! gheapMemParams.size = 0x4000;
' y  h# @: k+ E* E' y& F! I
" n2 h$ P$ A7 O( J, I& J: dvar Memory = xdc.useModule('xdc.runtime.Memory');2 o. g& d+ r# L+ m$ M3 c7 V# w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# O6 o' y; w5 z- `4 O" a* g, d0 f; l$ V* f
我大约calloc  每次共计大小为5K*16bits,
% Y$ |: R' r$ M& y而默认配置才0x4000、需要改大。
1 I. n+ I5 a7 B' _
% M0 J0 ]3 V! j; y" M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: F. E, x: r% s' P6 @2 ^Program.heap = 0;
& K( C* n0 ^; |: n$ `Program.argSize = 100;  /* minimum size */% t% ]( e& x9 b" k  V- n
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-5 21:47 , Processed in 0.042125 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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