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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 }; T5 y) N7 D$ o% a
# w0 i* o& ?. Y$ c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 O/ M$ z4 b" Y4 u* I7 i7 o
7 E% b4 Y6 M( O7 d" i: F, |
其他程序段。。。。。+ Z+ s$ {1 U# I3 r' R7 N% k
, Q7 z% f7 g# L: _9 y3 j
   free(x_d);
3 L. p- O- s2 N6 y+ X2 n) @! a2 V+ k) _4 _
使用DSP侧单独调试功能,验证动态申请没有问题,# m3 n* z) c6 I5 d

/ O7 z# V) q( [  w$ s: K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; o* }) [6 I8 y- r- @9 C
# @: e7 C* r4 |0 d# Z- Z
4 o) m% s+ J3 d7 X5 Z

( H) s; [! h. u& m$ m0 N. m# W* r7 \
4 U. x1 E# @% `8 m  @* U4 h+ l, |7 S/ t# [  L
5 ^) w, ]8 U2 h! Q! ^$ f
4 k& d$ Z& ~) e. o9 {3 U: y3 T. w
: U6 {! p5 s! l; r' }
1 U; f+ t  t8 b( J- j5 ]
( C, Z1 w: ~8 i3 ]3 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; Q3 E2 P  U6 P: Z2 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 O' k" G) C; C* ?" s6 _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 g. y( Z/ x! B  L

; N+ R8 }3 i9 o$ l! y/ K' _是不是需要在DSP.CFG中进行配置
+ E( c  ~  Y) r9 `0 K3 [我现在的配置为
/ v, I' y4 W# \3 x  d: [$ H1 H% j( ^2 ?3 l/ G8 g" v$ s$ {
/*# x" b' e$ S  H
*  ======== Operating System Configuration ========
! T* r; L  ^4 c( ^4 }( [ */5 V) c3 M, g$ }7 z! u! c
# p4 w" E/ ^' R" d& z' d( ^
/* no rts heap */5 m+ D0 a- r# Q5 n
Program.heap = 0;
3 q/ d$ `# a' \, v0 cProgram.argSize = 100;  /* minimum size */
2 W& ^- A9 O0 ~, t1 u5 `( rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" q/ ?2 D& i+ S0 n. R5 x' L- G
: T( @, ~: h9 I2 U& R4 [" y8 W/* create a default heap */
, D( p* y+ K' p9 I; R' uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% i% k  @/ k2 \3 d' x6 r, Uvar heapMemParams = new HeapMem.Params();2 ?! ?, |9 _% y$ [$ z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# t2 Z: G$ u" A0 A

7 G% w. N  g) k5 L+ J" p
var Memory = xdc.useModule('xdc.runtime.Memory');% P3 x  z. O" ?. Q+ C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* _9 I& ~0 Q7 i+ N: o9 H$ {% c) Y
- H7 y; T3 q  K
/* configure System module */
9 P; J2 {9 k4 L, Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');* s# F- U0 K: O
SysMin.bufSize = 0x1000;
. M9 ]+ q) e6 G- o% G% N- E, n- nSysMin.flushAtExit = false;
" Y; g4 E( C/ e) [  b& B, B- E# `; y
var System = xdc.useModule('xdc.runtime.System');+ w5 E9 z. c0 g  f+ M7 O
System.SupportProxy = SysMin;
* k3 r) ]8 T- h: B
( ?7 n. H' }9 l- u# I9 G$ V/* configure SysBios to use the lower half of Timer 1 */
; v9 ^$ o4 l$ V7 o* \1 [$ d, Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- l7 S9 I  L, _: j: o* C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! q2 h( d- r9 GTimer.timerSettings[1].master = true;- W- R# l1 Z7 G9 T3 Z' n, s$ `1 K
Timer.defaultHalf = Timer.Half_LOWER;/ ~6 Z3 [1 Y) }" R
Clock.timerId = 1;% T: z0 U5 q) v1 z" A6 P

, Q& }& U+ m( i: _* o+ ?( V, {4 R
/*6 \2 Q8 e9 t2 X2 Y" u; W2 A( q
*  ======== Miscellaneous Configuration ========2 O, j$ P' P* g1 |0 D
*/* `5 q6 r) [0 g* \& Q

" v% T7 B1 n5 T0 v/* set default diags mask */, b6 w/ ~5 {# R- D: y
var Diags = xdc.useModule('xdc.runtime.Diags');
( p9 M. r' v# U1 ^var Defaults = xdc.useModule('xdc.runtime.Defaults');$ N( t% s7 w5 [( j1 X' ]# q1 ~

9 n  ?# i) x, e1 A. \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 W1 a' n9 b7 W2 T$ j1 aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ y& G8 _/ U0 s" L7 o1 @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 \( U4 `' K* U; C: B6 w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 D& R3 n0 z! i* ?+ `# d2 f9 x1 H" Z1 XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% H' ^! o3 U. I/ E/ U- x+ D; N1 ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& _8 h( W8 z1 B6 b& |Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ u; r: b0 T. E" V- w' t  ~0 ]* h) ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& o; k4 W2 m4 I% ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( t/ j, M7 @( E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) @1 i3 ]' o( g+ i6 ]2 kDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" X, X* W' @7 W, }1 q0 ?) qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% f- s! O* \/ pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; ]' ~1 m* f" Z5 A5 N; A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& }8 S; k/ c% d* G

7 R3 [- U! D) q7 G1 }$ s/* override diags mask for selected modules */- X6 b$ E0 Y1 h. m
xdc.useModule('xdc.runtime.Main');
2 Z, y1 M1 P& pDiags.setMaskMeta(
' L2 C4 y) a" k8 o    "xdc.runtime.Main",
' }7 y/ p% I5 m1 N, d1 K1 t7 f    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: Q  V( L+ `8 A, Y6 d7 b& L    Diags.RUNTIME_ON1 W4 N/ b) Z# ]' R2 q9 T) n8 b# \% |
);: h3 `2 ~+ _8 L

% ^" \0 E) C. Kvar Registry = xdc.useModule('xdc.runtime.Registry');/ m. V- ^8 G. H7 e' z! s/ z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 S# V8 |( Z: N9 V( b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; W9 ~3 r/ D3 `. {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 E; S' i+ |0 b2 c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 j6 K( J$ C$ Y- I& X
. P% C& m& J% P
/* create a logger instance */
& ?1 J5 V9 l9 d- Y. a3 n1 @3 o$ ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. [2 }3 g& ?8 a8 Ovar loggerBufP = new LoggerBuf.Params();
4 K$ ~2 B4 a) w! g# sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 v+ L6 P# D3 P% sloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 u4 i6 F4 h$ \5 K
3 ?, n, V9 s& m* a: I: n6 I
var appLogger = LoggerBuf.create(loggerBufP);
+ t5 p  a+ ?3 S1 N- {appLogger.instance.name = "AppLog_Core1";
1 U7 }' L+ d: V, F- A1 V" a. c& J5 ODefaults.common$.logger = appLogger;
1 G$ S( }, e; E4 B  a2 P; M+ h4 AMemory.defaultHeapSize = 0x8192;   
& f+ s2 X2 Z! E  dIdle.idleFxns[0] = "&LEDStatus";0 ~3 F2 W: G0 [% x
Cache.initSize.l2Size = Cache.L2Size_32K;
+ O2 ~5 r$ x$ P. E- G0 k" `- k, ]# y) [7 U2 o# I4 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 */
/ M6 U9 O; G$ I/ g  G% Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ r( ~  X) Z% q) o$ _var heapMemParams = new HeapMem.Params();: b: F& l- F9 u! l5 H- K* n
heapMemParams.size = 0x4000;( e/ c& r: V8 [& v
% ~* u1 B$ C/ O7 j
var Memory = xdc.useModule('xdc.runtime.Memory');
# R0 Z( C3 F9 p: t8 ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ B' V; V' u2 E1 e) p3 @% n
3 d- {* J# X# U2 h
我大约calloc  每次共计大小为5K*16bits,
* g/ Y$ {+ r6 |# g0 M+ {4 B7 v0 z( v+ h而默认配置才0x4000、需要改大。
/ c! y- s6 B* Z1 t: s
" w, T8 [5 k8 i" c% G2 t+ u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, r. l2 \0 E* \' l* b2 ]$ yProgram.heap = 0;
* d  F" e  e( iProgram.argSize = 100;  /* minimum size */6 V5 o: O7 H2 F; F
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 00:08 , Processed in 0.040961 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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