关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  b. P: Q/ O) w+ h* ]7 H6 }- {! z" k% s4 w0 l2 _; m9 W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: }2 m+ l% ~6 R( Q6 R9 I

4 y; l- C8 Z' j" ]. e3 I- o. ~其他程序段。。。。。
; I. Y9 F2 U& R# N - p  y  n2 k, @( b
   free(x_d);
, s; {$ t* J9 Y9 J+ n/ l
/ N/ I# _4 }. g. z& h使用DSP侧单独调试功能,验证动态申请没有问题,
5 x1 W: A+ A* x1 x' _2 a1 o6 x* n( b$ r$ r- S- V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" n$ k  Z( E, w0 o/ [+ y0 Q
/ o' F* c" X8 J0 U% Y

1 o3 ]9 }% C+ ?# `  \: W: z* _) {$ k4 k( i* }" |) z: V! q
7 @8 D4 K) O9 x6 Y. b4 u8 |
6 |6 u, Z* P4 v; }

$ A# l& e" A6 z* p" ^0 P2 A5 k0 v+ M/ W, v( {7 ^+ O

3 W( ]' ]' W( M/ @" t9 X9 F8 O- d. {* x$ J$ p6 _

7 |1 w& o- {3 \) f' F' g4 F8 `' P( ^& T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 M4 V' a) {" y) R* V  s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 b, s' ^/ W& @* }; d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* f# ?4 S& P  s. S0 b+ d

& _; d( n6 @: y& A是不是需要在DSP.CFG中进行配置5 f6 l$ z6 k1 G+ Y
我现在的配置为
$ H( i* |9 u6 J# v7 F3 U5 t5 [3 _9 R
/*. {. K( o$ V6 z) G/ j
*  ======== Operating System Configuration ========
1 r& c: M5 g9 U1 u8 t% ]6 b# B */
4 O, ]  P+ l( h+ ^7 {
- x+ F* V9 C3 h/ y8 ?& [2 d0 q$ f/* no rts heap */9 {5 z. l+ H& B& X$ ^. z/ }% U' Q
Program.heap = 0;( s, t: I& x2 c( [* k* c8 a
Program.argSize = 100;  /* minimum size */
0 X% s2 T2 [9 I7 h6 Y( ]' c( FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 Q+ J# \% N+ T4 Q
% {+ z2 {1 ^- P) k* u' n
/* create a default heap */4 j; n6 E( Z7 R& w: |+ `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* J% e3 S" ?! y: u+ F3 ivar heapMemParams = new HeapMem.Params();
; h& ~" a) E2 IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 c( m5 b( Q* F4 G
' ?% d1 _0 Y1 D- o7 B4 Y# w7 p. _; u
var Memory = xdc.useModule('xdc.runtime.Memory');
& K' @7 J- e- GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; f& j4 s8 m8 {; F, m& M5 r2 V5 H# C; ?
/* configure System module *// Q: J8 C( D1 e* r
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' f( u' K5 R9 S; sSysMin.bufSize = 0x1000;1 E' J* B/ e! I, e  Z* U$ e  r' J
SysMin.flushAtExit = false;
, T0 a: O- a2 j$ n6 I
& j# F" W$ [" z. _  g( f/ jvar System = xdc.useModule('xdc.runtime.System');+ u6 D3 g( r! |0 Y# E# P
System.SupportProxy = SysMin;
2 _- b$ {9 E- i% ]2 y/ z! e
# d7 P8 z. R& F; l9 f# C/* configure SysBios to use the lower half of Timer 1 */
% w/ ]5 B: f( E" z. O; _+ O2 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* \7 ~9 `. q) i: f; R6 o3 y# _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" v7 b7 L- O1 ~8 P) Z# p* VTimer.timerSettings[1].master = true;: K- V/ _. b$ u/ ^
Timer.defaultHalf = Timer.Half_LOWER;
* b$ [+ o$ O- j% C* S0 ]Clock.timerId = 1;
- s) L5 y( h3 F- S
1 Q4 \, `7 S2 J
4 P6 \# Q" A) r/*
* J7 [8 z/ `2 F, W- D: } *  ======== Miscellaneous Configuration ========& k! z! G8 l+ B2 O
*/' ]  H5 {$ q* u7 Y! {; X  A

; }2 Y5 z+ T3 N% x: P0 l$ K/* set default diags mask */3 ~) y3 b7 y8 g$ X  P4 [  K" s
var Diags = xdc.useModule('xdc.runtime.Diags');7 L% E+ n& E4 I5 x, L
var Defaults = xdc.useModule('xdc.runtime.Defaults');- X% d( W; k+ P7 c  I# ^

( `/ _% @. j/ ?; ^* _* tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- z& Q6 e  C6 P. `. F. MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 M; G0 r5 v  i8 m! U
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; ?( [/ x" W+ G' m) H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 ]' d+ U' n7 B* o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 p# X& C- P# @$ V4 {9 l9 V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; q. T- n8 q5 @1 r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( @6 \# I1 v6 `) v# aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' m* u- A: K1 t9 D# rDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, j4 @1 v" m- O1 L1 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ G) J" u0 k5 y% J& l5 Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& `, b5 d. j6 J4 R4 C( c% e6 F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 N6 }0 T/ u" b  S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* h6 d+ G: Q/ r  QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 j. o( D" y# d; r
  I8 e  M7 Z! d  e6 W6 }2 s. H
/* override diags mask for selected modules */& f* E: f6 L9 o, m
xdc.useModule('xdc.runtime.Main');
. ^' R$ \& p" X0 s- g  w1 GDiags.setMaskMeta(
2 |* s9 l5 }0 E4 a    "xdc.runtime.Main",
3 p! z: K: x: e. y- W1 I* u& }    Diags.ENTRY | Diags.EXIT | Diags.INFO," S/ Q) @0 Q5 ~* j
    Diags.RUNTIME_ON6 r/ F* y' G; V& z' ?
);* z  c6 g5 {: ]# V0 g6 m5 P
3 ~) h2 l# Z" l2 v# z' t
var Registry = xdc.useModule('xdc.runtime.Registry');
- k- ~( y8 ?- U4 O0 e2 d& QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( i; {' j, l/ k+ s; l4 z6 ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; g, O  J, x5 ]% d* T- pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" n( h8 n) f3 g3 }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ v' O$ @9 e" r2 Q1 B" U

) d' j- e9 ]1 B) T3 O1 }8 W/* create a logger instance */9 l- T% l- i' W0 B4 i/ v* t- p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) F/ U% W" p' T! Tvar loggerBufP = new LoggerBuf.Params();
/ k2 Q' m3 Z0 C/ LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" I2 n+ `: s2 V5 y* j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# ]2 }% U3 @& g2 I6 A: s( o
: }2 Y3 V) ~( A5 i; X; g, ^var appLogger = LoggerBuf.create(loggerBufP);
6 U4 G( q, l2 s  {# h1 q$ tappLogger.instance.name = "AppLog_Core1";8 [0 @5 ]1 O: w+ F' }4 E
Defaults.common$.logger = appLogger;
! H8 h* C' `* ^( X1 ?$ u1 qMemory.defaultHeapSize = 0x8192;    9 {  v3 V6 @! I1 J9 g+ m
Idle.idleFxns[0] = "&LEDStatus";9 ?/ U# {5 r" y, P+ h
Cache.initSize.l2Size = Cache.L2Size_32K;
2 p! q/ \1 s" F9 u# `% i+ a2 Y, V
/ i+ T/ v: l( }: S& |* D
回复 支持 反对

使用道具 举报

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 */
+ z3 q* r/ s% qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) h, O1 b7 z! A$ w
var heapMemParams = new HeapMem.Params();+ `* t! O0 ]; M; _4 u$ p4 W
heapMemParams.size = 0x4000;
0 _) g+ Q6 c; g1 s) V. t+ a7 k; B  d) i
var Memory = xdc.useModule('xdc.runtime.Memory');
; e' U( `9 I/ u: N& d/ e+ U2 hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 t, I, O& E: a/ p; }. c) ]
3 P; K7 z) Z" r+ }我大约calloc  每次共计大小为5K*16bits,
" v, q( r! K4 z4 v/ N  k+ _而默认配置才0x4000、需要改大。
- F/ b; x7 i: ?, G7 w3 r& e4 L1 q' U; {) L' v" B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 O- N  Z* {9 u
Program.heap = 0;
! t' s" s* o/ Z6 F9 i, @Program.argSize = 100;  /* minimum size */
& V/ I# L9 Z& eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-9 03:36 , Processed in 0.040088 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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