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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 f; s- o4 j; J3 X( T% u! @- r( F6 `. I# J- L* g' E, u0 Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 d9 U2 E4 y& Y2 _' ^* E4 h5 {6 n# W% x3 h/ g! D# z' \1 ]6 J
其他程序段。。。。。
% i: `+ Y5 n0 c& W ! Y& k' c& G8 @. H% g/ O
   free(x_d);
3 Z! S) j' C1 W6 Y4 \& ~- Y2 C( b1 e9 ?6 c8 B$ s" l9 U& O4 h
使用DSP侧单独调试功能,验证动态申请没有问题,
+ M/ y  B) z1 n' r4 U% M7 Y% L
1 ]7 n# p6 ?  M' ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; ~; V2 I. T6 B* `5 J
# f' H1 U6 W4 p) P9 B

7 P/ {; G# {; ]* G/ m! [# h  H8 w; }! q5 k4 ~3 V6 z1 s

0 ]. B5 P0 e7 M8 t# J2 ^
0 O7 ]/ q5 x0 @7 g/ o9 [" ~& p
( _- t  L% G4 R, y6 B
7 Y3 Y) q; {3 I% P0 r: M# @" q
  a; H$ \; C/ q; Q, k, Q5 T% u* u1 l1 y* D

# K5 ~8 _3 X, ?6 j2 C( V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ O4 r! o8 S0 q) T/ x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( J4 A7 r* M: W( k8 Z( _4 U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 a- `5 j8 Y" n. q
$ G/ S& `' M0 Q" E8 U
是不是需要在DSP.CFG中进行配置6 M# F8 R! |5 v& C/ c, ^# j
我现在的配置为6 w; ^4 C7 m/ ^& ^6 p

9 T) i. e* @! D5 c: q- L4 f/*
7 I2 ^/ `& e# g& @" x *  ======== Operating System Configuration ========
8 O, [7 j" b& n& k( H */% [) B' \3 h! f! h: Q3 u) g, Z
: Y& ]8 J- X; q! G, T6 a
/* no rts heap */  T; g6 ^. ?1 w7 I
Program.heap = 0;  O" y$ b) N" f& q3 v3 N/ o/ B3 j
Program.argSize = 100;  /* minimum size */5 T' M1 z  Y) F9 {5 T2 L2 m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* L* G  n/ K: e8 G9 X
0 N! e9 l1 Z. L/ O2 q4 j
/* create a default heap */
( E3 v% Y4 L( t9 f: ^2 E* Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: M: Y/ n  J4 B4 a$ p; Q4 q- u
var heapMemParams = new HeapMem.Params();
# \" C& N$ Q$ d) _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 q% B" P$ \5 X' q# q9 C. ^) j" |* v) F
' p  \3 ~. R- g) R( Y0 n
var Memory = xdc.useModule('xdc.runtime.Memory');/ `* Q& p% X4 K  z4 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 Z/ p8 p& l3 u% {( M
$ R. u6 i1 ~& P/* configure System module */
2 w1 u: |" I' {5 y/ bvar SysMin = xdc.useModule('xdc.runtime.SysMin');$ G) {4 v$ R0 W+ n  J, H) ?  Y
SysMin.bufSize = 0x1000;4 j* r3 V. ]; A& M6 d/ {
SysMin.flushAtExit = false;2 @4 w# C( g$ A# K, s& |1 i

/ E- d# |) m% ~: S2 x# hvar System = xdc.useModule('xdc.runtime.System');/ T- P* I6 }6 d% f! U# s* |
System.SupportProxy = SysMin;  k5 ~; X& b' t" j# q5 R% w9 _2 a

1 p) x% E, S$ ~  x/ @/* configure SysBios to use the lower half of Timer 1 */! m7 ?/ n) U' N8 \  n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- X' [& i" P$ I1 A! U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- W8 [, M" x; ]2 _( tTimer.timerSettings[1].master = true;
- d: u) E. y9 xTimer.defaultHalf = Timer.Half_LOWER;5 l0 o% Z6 a' _/ w, R
Clock.timerId = 1;+ I# f( p" l& g) f! U: ~4 T( Z+ S( l- |
5 k- [6 V! B; r$ ^! ?( }
, H* N2 ]- ]( r/ m. C9 U2 S$ M, n
/*+ F' t8 S. q& {$ M- [7 X% @
*  ======== Miscellaneous Configuration ========! F0 W- [8 \8 v1 z
*/, @1 L7 y7 O9 C" Q/ k  E( B% G# S

8 ~7 ]. C$ x5 g- S' `/* set default diags mask */
+ _% U9 n! }# H0 rvar Diags = xdc.useModule('xdc.runtime.Diags');
1 J" a4 J" U1 X0 O! I9 R1 Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 |6 i4 |6 R2 t3 u+ O* D6 n* N+ S# t  P4 n* X1 S/ l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ @! |+ R! D* a4 sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! I1 z  y6 U, ]+ U8 ^$ M
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 e1 }9 E/ [: ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 `6 K$ e* Y' a; Z# W/ \6 P* O1 V. KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 T7 a% e1 Q- O. oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; W: [3 i7 s0 t2 g4 Y- o1 WDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 F+ d4 }% q- v- JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 D% z! c/ e( r5 A
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 z" {- [) t% t6 j% iDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 K1 u* P" i- X0 w: t: K1 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ \& S1 J) O5 F) d) m; F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; ^! n& I1 B1 ?- t  N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 V# d3 N7 U# b2 U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" E) Y5 [) D( I! ?2 y
: {: @9 h: J# l/* override diags mask for selected modules */
6 u; N7 ^# }: `3 A" o8 Hxdc.useModule('xdc.runtime.Main');
( l8 ^! S0 a6 f6 R' l# V# r- eDiags.setMaskMeta() |! v% E0 g7 m$ H* B
    "xdc.runtime.Main",
/ W8 \' v8 o8 W/ A    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ |2 V2 ~" U; h) ~
    Diags.RUNTIME_ON6 t. V  M. R2 a2 k
);& W  T% p9 d4 o; d0 x# ^( Y; [
0 f0 T$ z8 q+ T3 s' P
var Registry = xdc.useModule('xdc.runtime.Registry');
+ c2 W4 Z6 L4 i: c- R5 F( `+ |$ y' PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. e( u; p. s: J2 F7 P+ ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: o6 l, X# ]' e" l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 D- i* y; K! O9 D. FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ O0 _9 k5 s+ {7 ?) r' k
6 ]2 ?6 y, A. j8 n& u
/* create a logger instance */" O' _# w9 \& H! G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; Q2 M* H8 p0 ^+ }2 i" Avar loggerBufP = new LoggerBuf.Params();, T$ N, U3 |: {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! E% x% ^7 N# G6 ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 O2 s; v# w: X3 b- W- v' I4 n, X* v
var appLogger = LoggerBuf.create(loggerBufP);
; U3 E: }5 H  ]( k4 z8 }+ g7 xappLogger.instance.name = "AppLog_Core1";. e2 V& i7 l2 C" A5 z& d
Defaults.common$.logger = appLogger;
9 i7 A: _* n8 Z/ v7 v. w2 Y2 \% r4 O3 RMemory.defaultHeapSize = 0x8192;    / _4 f7 F, c9 E  w% o
Idle.idleFxns[0] = "&LEDStatus";
- y! Y2 l' {" P8 e" V# J8 eCache.initSize.l2Size = Cache.L2Size_32K;
% C6 E, ^3 z, W5 E. r( b; [5 H3 k. f1 ]+ v% _
回复 支持 反对

使用道具 举报

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 */0 [6 M  |8 U9 I9 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 H9 d' T: H% v8 U  Q. Q1 O9 bvar heapMemParams = new HeapMem.Params();) D$ ?- u- T. _1 d# W" \3 m5 A
heapMemParams.size = 0x4000;
# u+ {  N" N+ Z& P; @& c% [
6 e/ u1 H% L2 J  j6 A6 K& v: m& wvar Memory = xdc.useModule('xdc.runtime.Memory');
: E" F: o5 S. h* Y8 d0 MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 m9 o0 c  l% R5 i8 v4 c
, T( _# i- g" M- c4 p% z
我大约calloc  每次共计大小为5K*16bits,6 p! v3 ?# H/ i! Y/ y% D0 B: z" I7 _8 X
而默认配置才0x4000、需要改大。
) f: V. P5 Z/ D. Y7 q# a
$ {# {% Q$ A! z3 D; `9 e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  F6 \! D5 R, L% p9 E8 R- Z
Program.heap = 0;
: {5 @& H2 Q1 wProgram.argSize = 100;  /* minimum size */
, x+ r! y  G. }& O. Z1 [0 YProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 10:06 , Processed in 0.054750 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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