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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* e; w+ H# P; y: A0 {8 M: r1 N1 C$ {* A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' V1 v; a1 L, d7 s1 o* E+ M) h/ P
9 s5 ~' ]. |. v; a1 N# J
其他程序段。。。。。
) ^* {" ^/ n! @# @! ] 0 w4 `; G3 ^# Z/ b) I" ~4 m
   free(x_d);% u# s$ J# t' @6 P( |
" y, @! ~5 F, |7 z
使用DSP侧单独调试功能,验证动态申请没有问题,7 `! r2 ]1 f+ a' x6 A

1 ?2 t/ U. E+ k但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. W( r) f* J. |
0 l* r( P$ {+ u. l6 k
2 g- @# q$ g- g

" Q7 F, k( x- B1 c0 D& ^8 Z+ M: O: X, v5 q! C8 ?/ [

2 W6 O: J* r( P/ Q/ X6 W! m  x4 _% F* {- _; s- x: l% v

, o: ]3 y, R+ X3 o( x
$ |. ?& j( j7 r  k7 |- |, ]
: l# Y' d/ @6 b- x9 Y* R4 X& O8 z% V9 O- Y( `0 }" H/ c# D* r8 w. a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# S. q; [9 E9 U! E' X
Program.heap = 0;9 G. h' W; V. D" C
Program.argSize = 100;  /* minimum size */5 l% B# C' A0 j# m8 m( V, D- n& @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* n; f7 e, q# o. x4 n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: q& p/ o2 y7 \) m# H9 `var heapMemParams = new HeapMem.Params();! b! J8 o$ b: I5 W9 U
heapMemParams.size = 0x4000;) }1 [4 R' V7 v. J: {

* L; }2 r' J0 Cvar Memory = xdc.useModule('xdc.runtime.Memory');
! H  o/ \3 p% OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 J0 w3 V5 W1 C# Q* N- F/ Y
! v7 X& {' L' e8 i8 A! S+ k我大约calloc  每次共计大小为5K*16bits,6 H5 V0 e) p2 p- J
而默认配置才0x4000、需要改大。
, Q3 {$ {$ C9 Y, D# O, b# f9 w! s
! K3 k" N# r1 u" I6 c" I- X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; ~' k* T, G, D! J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, i  C& c( F/ o1 ?* ]) H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) y" p* H5 h8 R% F* C2 H

# T& j2 e3 B; z; s# ]是不是需要在DSP.CFG中进行配置
8 E* p0 Y1 W* e' Y* j1 }我现在的配置为
' |) n& S" D4 C' u+ y4 l0 ]. X9 l
/*
4 h0 w) P, ~) \) M1 W% E" R8 i *  ======== Operating System Configuration ========
* x- u& |0 g" [; f  V */
( c7 u8 @  r# h: Q$ |: w, z2 |3 W; U7 V( e$ }+ u$ t4 c9 K1 y
/* no rts heap */8 {( _% Y9 G( g* B  z6 I
Program.heap = 0;
2 {$ {3 T0 X) j! S* X* W8 y# CProgram.argSize = 100;  /* minimum size */- x5 p1 h1 K7 Y4 C: w. M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 F' Z1 M8 k9 ?+ |" C
" V, A3 \, B6 ^2 F. a
/* create a default heap */
; n: i4 A4 q* i; B3 ?) K7 c3 K+ Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 z# |* x6 Y2 \
var heapMemParams = new HeapMem.Params();6 C0 ~: o; L$ P7 u3 s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ w( b2 L( I# F# ]: C5 x  J0 u9 R
var Memory = xdc.useModule('xdc.runtime.Memory');
$ W, E; I3 C* H+ s8 I2 [4 XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: h6 x. V+ e8 f7 W! D2 r) H6 ~- f
8 w2 j. T. B) F# }+ j: e/* configure System module */- D# G! n& R/ d1 Y& e4 \6 U' }
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 f+ [+ x6 z4 l$ a/ }SysMin.bufSize = 0x1000;
3 G# a9 |/ ~/ }0 _  i. w, iSysMin.flushAtExit = false;0 I7 W; S- E2 @; d

$ {& n$ @! I) P0 J+ F6 pvar System = xdc.useModule('xdc.runtime.System');
0 w- M& r+ D; n! s5 \' t# YSystem.SupportProxy = SysMin;
9 R" p/ Y9 X1 _' O+ A' y
- m9 K- i7 ?5 i" |8 ]/* configure SysBios to use the lower half of Timer 1 */8 b9 ]" U: J2 p) y2 C" T% K; J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 I1 y* [$ d6 a( {  r* V% [var Clock = xdc.useModule('ti.sysbios.knl.Clock');) d' d9 t" x, I/ ?0 r& v% t' `9 u8 P
Timer.timerSettings[1].master = true;
5 `+ c" D: b+ ?4 mTimer.defaultHalf = Timer.Half_LOWER;* l; _7 T, g# O
Clock.timerId = 1;& j) V4 R1 W6 ]8 f
" d1 M9 Y! a/ L% v& A
" y2 d$ n2 \# D# t5 K
/*
, ]1 Q5 z5 D" H9 y *  ======== Miscellaneous Configuration ========( v6 ], R& z' M, N1 K( A" q' q
*/' `( S- I% M7 Q* L4 {
) e1 i8 B8 B' \# D7 W. W! O' [
/* set default diags mask */
( k: z: L$ e$ F; k; pvar Diags = xdc.useModule('xdc.runtime.Diags');
, A# \7 L  h  A% t" I  P5 u% Cvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 L  Z" j& l" H$ i0 B

  N" z3 P6 Y( b9 W: \4 rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 J/ W' J" w! X& \7 r6 i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ L, w) B9 Q' i" Z/ n% FDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# ~7 X4 a7 I' w9 R( p
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 z" ?. G2 N# J8 ?8 r( c, G: `( jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: L- W& A! ^# R4 j2 h9 U( ?& P: sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% ^3 E4 @# l3 u+ M$ \! {. m0 [/ ?. rDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. i- C% B% f% h1 Q4 wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, ^- \1 b( G' N  a1 QDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 j* w, @, T# H( c0 _7 x: B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" k, M6 |: f$ o% |; \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. a, d, G8 [" y0 \, A+ ?& n! H, K+ H7 s. aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. w% Z# y  b8 \: P" lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' m1 Y8 J4 N) U8 o3 M; y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- W" u! q9 c7 F+ w. u9 ]

( B! }; W5 G. T/ m/ [7 l/* override diags mask for selected modules */3 m8 ^1 J$ r% b5 D
xdc.useModule('xdc.runtime.Main');) E+ t% t4 D7 P; I# e6 A! Y
Diags.setMaskMeta(
; G& \7 p4 W9 r6 ~" s6 F( O( A+ `    "xdc.runtime.Main",' S% @7 r8 N9 I+ i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: l" @; N; o4 A+ W2 V: y4 ?- q( U
    Diags.RUNTIME_ON1 S' D3 n' @# h& w' r1 v
);, Z5 ~9 b) v' f2 v5 c) L: B
& [; o# n! W" H1 J) p3 M( G! l5 h
var Registry = xdc.useModule('xdc.runtime.Registry');  ]# Z% @( Q% b: Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ a3 B3 P' T* S$ A: Y( \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  j7 J8 K( `+ kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* t. b0 A) K" ]. J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) s6 b/ W: l; v: p: L0 G) _6 E2 j! S) E6 z" I$ h: C( C6 c1 a  S
/* create a logger instance */
+ I. K5 {: J6 H# B4 i+ d; X1 H# Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% a+ W4 _4 ?4 a! t1 w0 P& R
var loggerBufP = new LoggerBuf.Params();7 u9 c( C4 f) E# O+ i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 k- G2 O* W( y; L6 ^! Z- E5 X/ Y( \6 lloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 B" |/ B3 t% ^9 Z8 P! S: b  S) G* k; Q( k
var appLogger = LoggerBuf.create(loggerBufP);
! y" ~" B3 @1 L9 UappLogger.instance.name = "AppLog_Core1";/ q0 T# }+ D) |7 c
Defaults.common$.logger = appLogger;
7 F$ o2 n7 |# d1 d2 I+ {Memory.defaultHeapSize = 0x8192;   
% r' N" h- n2 kIdle.idleFxns[0] = "&LEDStatus";
* _$ Y) |2 c' h: K+ Q: z6 yCache.initSize.l2Size = Cache.L2Size_32K;
2 G( R, E2 w8 A3 L, T) ~
# q; d* J! T% Z% ~7 `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 11:21 , Processed in 0.043719 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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