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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 {5 `+ B. [4 g7 p$ u* v, M; L' W! l" A( N: T$ m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 @+ y! d: H' M/ `" h" ?1 y) r
2 j/ S2 f4 M( I7 g0 K& `其他程序段。。。。。
! D1 z; ?' c( E, D6 G5 O
) I: u4 P3 B9 }   free(x_d);, L6 s: Q2 B# k1 _, v5 L- |

) Z$ y- S: ~# T使用DSP侧单独调试功能,验证动态申请没有问题,
: F$ F7 I' @0 ?6 g  U2 X$ E
: F, Y( o& o& ]& S; I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ x6 S% G7 z# ?5 k, A

# {) u% M% g2 F4 {, }7 J+ w3 `) B' I% K, u4 a  a. u) {
0 n5 x  H9 G: N! G( o

1 x  M9 O0 ?  J, X8 m& l  o+ t
5 s6 B/ ]  I; K) y0 M5 |( @

7 x( @  ?  N9 y! f6 }
. V! B% H% k$ Q1 i" k: V! a6 I! `: V4 ~$ Q

: X4 n' A. N  F; N4 F) w# O& o  [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' s, `  i- d. ~( X6 u- q, _& h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 }: e" w  J4 L0 w3 y5 r( A! r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: ]3 B8 F) E4 p$ [' ^" C
% L! {" I! @1 B1 @
是不是需要在DSP.CFG中进行配置4 e3 G' F* `- \1 C# f. _3 Q* [' ^+ f2 O
我现在的配置为! p3 G: X9 |: t# _$ |

  v3 c+ q: ]$ e. k* _% `/*
& k5 o9 \; E5 A *  ======== Operating System Configuration ========
5 T  m, I! L: P# W9 R */
2 c+ _3 m- W" E
. g  U" @8 I& [4 o* {9 q' o, d/* no rts heap */
( [3 s7 Q1 j4 [. l# I- ^Program.heap = 0;
. h, Y: [' E0 B( S, V+ A+ k9 A* x' NProgram.argSize = 100;  /* minimum size */! t. j/ c* n* I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 j9 Q. Y2 S* Y5 S: o* S8 `
+ P1 u" m. F6 @8 R/* create a default heap */
" P4 W( D; U' `$ C8 S4 I! a& `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: n) u1 K* W/ W2 i
var heapMemParams = new HeapMem.Params();
. m8 \) n3 y4 R, ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 {; }2 j# _: f" ~# E6 u

! h1 y9 V. x$ L9 R
var Memory = xdc.useModule('xdc.runtime.Memory');
8 L  r$ b) R. d8 a( D7 O, U. xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 o' `$ S+ r: d  i' o

* W4 Y) }7 r9 @6 w+ r. l/* configure System module */, G* N" |  `' }' q. |
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; o6 H- H8 W5 n) @+ sSysMin.bufSize = 0x1000;0 `* d, R$ X# s' C* U
SysMin.flushAtExit = false;9 r  j6 b( H- _0 d% q3 R+ {

& X9 L5 `9 P6 \6 Zvar System = xdc.useModule('xdc.runtime.System');
% N& @% R& Q( G8 e0 oSystem.SupportProxy = SysMin;
; t0 \  C# c$ Q$ N! q% u# e4 \% x# @! T3 y8 _$ Y, f: J/ H7 |
/* configure SysBios to use the lower half of Timer 1 */
7 g. o5 c) A, @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. n! H) N1 w' u. W" M1 T! B- m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, a; U; n$ _+ N/ J1 C! I
Timer.timerSettings[1].master = true;) F; P& g! Z6 C$ p
Timer.defaultHalf = Timer.Half_LOWER;
8 n. k$ N1 x. [3 jClock.timerId = 1;
6 L/ }- Z& \2 f/ T( D3 \) @+ m, s& Z
$ s" G2 F9 ]+ h! d& g: L4 M# ~, g& r
/*
2 E& i' K2 L! {7 Z3 }8 V+ a1 M/ J' L *  ======== Miscellaneous Configuration ========
. ^3 ^! n/ h3 q& j/ {/ d, Y# Q */; X, @! V2 H, K3 c6 G

6 l  f$ {: x" B9 A# O; W/ W/* set default diags mask */
0 m, f$ n+ A" I& w/ evar Diags = xdc.useModule('xdc.runtime.Diags');" V8 ?9 T+ X' e6 e. O* b
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" Z; `) H  E+ d. v9 d9 z4 p8 @2 ?5 e: v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  w; e; u( c# F5 F; v* XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 M. l: ~  q0 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* i4 \7 F+ R6 G( d$ [! l' }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ t6 N5 K  L9 z, E) z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 [$ W5 b& @# N9 h6 ]& g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: |5 {! ~1 h7 ^; ~* i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) d  I7 B/ Q! Z9 i7 M6 V- `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& G8 M! e( L% r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: L8 [" T# U8 k2 q* f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% A0 F1 D# T1 ~3 d$ X) ?
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, w5 \7 \/ _" e* v. a9 \7 O' _4 r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. i; A) V9 S; b' L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  j/ @" f  f  F  y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 c' A/ H" j9 b5 b
0 w7 {! F. r; N0 ~% s' r! d" E+ p
/* override diags mask for selected modules */
, v8 ?% s$ X$ xxdc.useModule('xdc.runtime.Main');
1 f! Z8 t; ]4 T( |! DDiags.setMaskMeta(2 B' h; r& J) D' z0 U7 u( |
    "xdc.runtime.Main",
" s$ [. K! X. d( o    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- D* [( ?: i' s7 ?8 @" \# \5 q) U# a    Diags.RUNTIME_ON( V0 p+ ?; U: a' ]6 t7 |
);( W# B0 f5 Y; N" ^( r

, H2 Y/ K% M3 b6 R2 z& \* nvar Registry = xdc.useModule('xdc.runtime.Registry');/ H7 Q% d- m: Q4 w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ P& [4 i4 K' G9 I/ E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' }) E3 G# U2 p, L  nRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! S% r$ p; F: YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ t2 A+ e  s% b8 {* g
' ~5 Y& ]1 h* k
/* create a logger instance */. V1 x! D+ R" |4 V1 A9 i5 M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: h+ @) z' s9 e* a" W
var loggerBufP = new LoggerBuf.Params();
' i& _' v( |  D0 B2 k0 SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ N1 u. ^' P) }  o* t) R1 _& M7 g0 [1 Q# OloggerBufP.bufType = LoggerBuf.BufType_FIXED;7 ?7 c; ]6 q& p5 C) E
2 K+ q8 B7 y3 F* [# B$ e  E
var appLogger = LoggerBuf.create(loggerBufP);
# ~1 v7 O2 u; X" R( U  ~1 x0 l, \appLogger.instance.name = "AppLog_Core1";* x7 i" w. M! ?1 s  J1 ~
Defaults.common$.logger = appLogger;" j" ], F* ]3 ?, C
Memory.defaultHeapSize = 0x8192;    % [+ C( X8 G' O
Idle.idleFxns[0] = "&LEDStatus";. Q7 Y/ c: O2 w: _0 `( @- W
Cache.initSize.l2Size = Cache.L2Size_32K;- M4 n( `, t% `" F) [
/ i5 p9 L; Z# i  R5 X2 f- k/ S
回复 支持 反对

使用道具 举报

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 */
5 k8 l2 E; x8 Y" D) [, S% e' C8 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- O+ E- r1 N/ Wvar heapMemParams = new HeapMem.Params();
( c) v  W% [7 {$ b1 S2 i2 c( zheapMemParams.size = 0x4000;7 S- Q$ z- [1 y8 R
" E1 V8 g+ t* l* f
var Memory = xdc.useModule('xdc.runtime.Memory');, I# v5 z: _! a! \( ^5 `) N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' `7 f2 w/ H" j7 k
/ p/ R) t: U5 ?' |我大约calloc  每次共计大小为5K*16bits,! r5 k; L1 L$ J' k! }5 U" @
而默认配置才0x4000、需要改大。
* F: I% q: r. A4 W/ Q  ?
  f1 ?( I8 h# G- M# x- g% h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 |6 L) l/ `& ^7 Z( [# Q9 t
Program.heap = 0;
4 a/ w0 A4 P3 A: i/ jProgram.argSize = 100;  /* minimum size */1 f; q- [) J3 T
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-2 12:37 , Processed in 0.046051 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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