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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ D. O. ~/ ?" v6 p
; T* C9 B% Y. \2 N6 C( Y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ {0 G  p9 ]- y$ ?+ q3 \9 K) x

3 J( H" @! \" f0 P, r3 O& r( {# g; N2 \其他程序段。。。。。
" I; n4 w( @0 i+ E+ t3 r; ^ : [1 R! ^( h' a1 J2 j+ t6 T) k6 G" p
   free(x_d);* y$ G- {! {( l% s* s2 M0 S

* E; k$ S1 r0 @# m使用DSP侧单独调试功能,验证动态申请没有问题,* k4 J$ C' o& h; J: h/ K

, H% m5 M- s: a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 I: Y) p8 E. I9 A6 N6 |
' V1 A/ M6 z6 j) O& h3 M

& l- Q" i8 }! F' b; l/ _! E7 E
* }& Q# h+ _# ~  {" F* U/ V2 ^7 a5 e; V3 M5 P

+ u( z1 l: W2 U
8 |' I1 d/ m: B- b
% p! Z5 W1 O/ E% h0 v+ {; K0 }% u1 w
+ x6 v& x; l; `# g6 A' E$ m4 I, U/ P" J
( t% x; H) j4 h- R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! X: E7 r1 A+ P" K0 c3 z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; ~4 Y& z/ ]" _) I( d5 v* o8 e(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( R7 h; r9 R' T6 p0 {" ]7 T
9 s& a( d( o7 o, B2 p" e8 i$ Q. b
是不是需要在DSP.CFG中进行配置
1 l9 x  Q  x* r, w' Z$ K  A我现在的配置为
+ e' ]* H. k8 i- R5 |! I) }/ I8 c2 O+ _3 U; t+ [
/*
* H/ U' R+ {- T+ s. t% K( R *  ======== Operating System Configuration ========
9 l/ W. J9 D4 y( H: U */
* u$ P+ G" E, {; |2 t
0 _  p6 ]" h$ c3 j/* no rts heap */7 p( S- F& u% i) |) e) e& P8 j
Program.heap = 0;
9 v; N, U$ F+ V8 ?: A* ~8 JProgram.argSize = 100;  /* minimum size */2 C, e& e4 B" z5 Z6 @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% X* {9 o% J: [: B8 l( F1 w

- o  O" K, E* y& r) A1 I/* create a default heap */
" V! f: Z( l! s9 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" q( c- L: F! S" c7 M! f' Ivar heapMemParams = new HeapMem.Params();! W; C3 b3 e* n0 q. M% j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 r$ ]. f% ~% t' j1 v

" I, V& ^! [4 M: i& C& n
var Memory = xdc.useModule('xdc.runtime.Memory');  m& Q4 k9 z  @1 x) J, E# n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% i2 ^$ R% r) W3 ~( g. V
) D8 ~# W+ q$ B" L- ]+ S& }9 k# f/* configure System module */
% w& i3 f- W/ y/ ]$ m, `& V3 ivar SysMin = xdc.useModule('xdc.runtime.SysMin');7 Q2 t& \* c5 ^- E0 i4 ~
SysMin.bufSize = 0x1000;& ?$ h3 \, X# ?2 r, ^
SysMin.flushAtExit = false;
6 V. ~" U# ~. k3 a' c$ a
8 B, S. w7 @' r3 P9 Ovar System = xdc.useModule('xdc.runtime.System');
6 l* j5 Y8 x# t  dSystem.SupportProxy = SysMin;
8 m' E. L3 V/ N& O* ^# S. ]5 m, n7 U# k2 \7 E2 k6 e6 D- w& U- x* [, H
/* configure SysBios to use the lower half of Timer 1 */" w3 l- c0 w- }7 A% b0 Q# L0 B* B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: A) ~2 k1 m7 R* }2 {
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. p  y0 S0 d! K0 r6 ^7 H
Timer.timerSettings[1].master = true;
0 A( J3 L2 M) V; wTimer.defaultHalf = Timer.Half_LOWER;
5 |5 R# E: P- u- iClock.timerId = 1;
6 d( t+ N# r" d5 q" X) h: ~5 U& ]- o- q  `5 _$ [
% s7 \& M  H0 R
/*0 t8 \/ R$ e' a# |8 I6 E( P" _
*  ======== Miscellaneous Configuration ========
/ [1 u+ V" i6 x" U */5 j8 O. x! ?6 \6 c$ G$ x

7 M8 d5 i$ K6 v. X  W/* set default diags mask *// W; ?" @4 ^, c
var Diags = xdc.useModule('xdc.runtime.Diags');% l! @$ y+ G+ M1 k9 Y( X7 K
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' N* o4 Q! S( Q/ ?
- X! ?8 R8 I$ E7 bDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: H1 F8 a4 F! S2 p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! M( y2 o. i: S' e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 I2 j% t" d  C( g8 T" e% eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& [2 e( q9 j( g. ~  _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 a4 O' w! c5 N4 U7 l; {1 S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# f) j1 {" G7 t  ]* EDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- {( U, B- d% f4 p$ r8 t! u, s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 _" G+ P+ ^1 \3 w0 ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 y  a* I9 @' y0 w# _$ f; IDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 ^" [( h4 U. I" f6 a
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 [) B" K* e( i, K7 B" a. e2 EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: v1 \+ W. R/ d  e6 hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 \* e2 ~. u/ M: k, z" K, pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 {% r& K: D5 R4 u/ j* o: V5 g3 Q* T8 r( C+ Q
/* override diags mask for selected modules */7 d8 D& R4 e1 ^; K5 b( a# b6 |4 X
xdc.useModule('xdc.runtime.Main');
7 S! k% Q$ [" P% m; Q6 Q; \+ K: h# ~Diags.setMaskMeta(; R! r8 E1 z) Y% A
    "xdc.runtime.Main",
$ ^, r# m% F( i( I4 ~3 {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: a0 p8 l& w. P7 \% F    Diags.RUNTIME_ON# C; C3 I+ H6 y
);* O) o& {- Z) I! W

5 x+ {- |0 i2 [/ u7 C4 g' Vvar Registry = xdc.useModule('xdc.runtime.Registry');
6 L9 M% d' o4 S, A0 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" n' j: A) N; L" L; G. c! R" A
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 N$ h' U, G! c: ]0 ~- cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. u9 v1 C& V& x2 y+ x: m( aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  [% W0 L  S$ v1 O$ M3 d* c7 d. I8 J5 Q$ y. u  o  g0 f
/* create a logger instance */
8 X1 k$ n. n6 O( vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' j; T, H0 x+ ~( N5 x/ J
var loggerBufP = new LoggerBuf.Params();4 Y* e0 e( J8 F/ U) I: x$ {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# F7 n; U: f+ BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 n# z3 `+ G  n7 l
! A# \, }0 @+ E$ I6 ~* Yvar appLogger = LoggerBuf.create(loggerBufP);; Q. t4 L5 w4 M1 o8 I; H% e
appLogger.instance.name = "AppLog_Core1";
: U$ ]. U) \" x4 T7 s) D- h8 xDefaults.common$.logger = appLogger;2 ^+ _: b4 g) B6 m6 V4 K8 n
Memory.defaultHeapSize = 0x8192;   
( J# T- S6 x  Y+ {* W9 ]' {Idle.idleFxns[0] = "&LEDStatus";2 ]$ T3 w: k+ O6 B: J7 S; D
Cache.initSize.l2Size = Cache.L2Size_32K;3 j0 ^2 e$ ~! a/ @. M6 k

4 F: o2 ]# q+ R
回复 支持 反对

使用道具 举报

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 d/ F! K) \( Q& C8 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 r  a# U; |# z, t9 s+ j
var heapMemParams = new HeapMem.Params();
$ z: m" d# U8 H7 _' e: zheapMemParams.size = 0x4000;4 c! }4 R$ @9 [6 ~) n. {' F2 S/ Q5 v
7 q3 F& a& }) {
var Memory = xdc.useModule('xdc.runtime.Memory');$ e3 b) U- j" M% D: ]$ a* P! h+ \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* F& L* X1 |, ]: ], K( i" r5 U4 E% y7 H7 u. P
我大约calloc  每次共计大小为5K*16bits,
1 G5 P& i3 k% M而默认配置才0x4000、需要改大。" Y- t' |! i7 i. ?, r# w6 k

3 t; _# @% E# q; a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, v' R' x! Q  X  l( X( ]: I1 D9 T9 u
Program.heap = 0;" v- U$ {6 M1 g" G9 q' q
Program.argSize = 100;  /* minimum size */
7 i  L+ ?" C% v3 w0 k; i9 P% M, a  o: ^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-12 09:15 , Processed in 0.046749 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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