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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 r% w/ l! B3 f7 i7 p0 e# ^" h- A4 T$ U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ Q4 N! N, `& W' x9 A0 ?* M6 \

2 i3 A' V' C4 g! f9 \; j2 E其他程序段。。。。。
: J4 n3 P. ]& K , ?; ]! a. o. N3 Y
   free(x_d);5 Q8 f( q& Q/ y+ T% Z8 |

% c; P3 H/ {. M7 r! a使用DSP侧单独调试功能,验证动态申请没有问题,
$ t' \% H8 y8 ?* I$ _7 K# r* B1 v  V2 h2 M+ y5 d' l& y: v! x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 c2 \% w4 J* A8 m) m

, k# Q/ x3 o$ p" C
1 [& M( N: i/ L
- Z+ _- u( j) L1 @+ ^! g" y8 y/ ]4 u/ y

2 J; l) \: Y' f  T
, Q% r3 k8 C" {# Q, X( X1 U' K+ I; ]$ f# p& w2 T% B
0 c  m8 F- o' w# T# ]

. ~4 @# R+ |, q9 q+ L% [  b  y: J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 Q" \, c) i7 [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 ]0 x/ Y; Z9 P. v3 R7 L(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 {& p* m( }2 U9 @' Y

% B! p0 _# @3 K9 e" Q. b: B2 ]是不是需要在DSP.CFG中进行配置
0 s- n5 y8 d% C) ]4 J+ \4 M, ^1 `  b) f我现在的配置为
4 o7 J( ?7 b4 M6 |# C/ [- E$ Q! `# _
/*
- {! O2 [; w" P, v: ` *  ======== Operating System Configuration ========
( f! \3 t1 |" Y$ j5 k6 m */
/ K% a  [" U1 n! l# p9 ?% M4 J' M9 A# M2 j+ h! c! q$ K
/* no rts heap */; M" W% u" |1 n! x
Program.heap = 0;$ j7 q1 M: A% W" m
Program.argSize = 100;  /* minimum size */
- ]  b+ U# R: S0 Z9 M2 aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 m  _5 O/ V3 m; R
( r* k; y. y6 K" h$ f/* create a default heap */
' ?8 C- i* Z- d& V; Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 @  U) \" D3 N1 X8 J: b% t- Y
var heapMemParams = new HeapMem.Params();
4 w2 [5 Q* N3 iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" y9 z" j+ B- z; a/ C3 R

0 O% O6 W4 S, D' `
var Memory = xdc.useModule('xdc.runtime.Memory');6 t7 d) P, R$ S- e, q/ i& @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( Q& z1 G  \+ e5 J

/ @4 l4 y/ h& H' r" Y0 Z4 V/* configure System module */
7 J+ l1 A9 Y% U+ |; J6 W4 P" @var SysMin = xdc.useModule('xdc.runtime.SysMin');' v: W  t. P$ i/ {$ c
SysMin.bufSize = 0x1000;
. U  Y- s4 q& ]" ySysMin.flushAtExit = false;. U: m# t/ e8 f* T0 H. x
/ t6 ]9 u+ H) X; J* v
var System = xdc.useModule('xdc.runtime.System');) g$ k" N3 |; l$ Y4 d
System.SupportProxy = SysMin;
9 B0 Y" v3 h- r7 }% S2 M' Q; V) G7 G* L0 |8 {
/* configure SysBios to use the lower half of Timer 1 */# a5 ~' z; u  K5 K: \
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( M7 C9 l) S0 R% W& n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" X5 |7 M* C7 ^( A* M5 R2 s( I
Timer.timerSettings[1].master = true;
3 ^6 j& p8 [, b: @- t" \Timer.defaultHalf = Timer.Half_LOWER;
1 `1 q& j! h! ~9 |5 `Clock.timerId = 1;
9 p4 T- P& l. Y2 X; P3 C) |6 w  P& u9 q) k4 T
9 a7 ]1 W# T  i2 I; [, Y
/** i; `- A. t; ?3 W. |1 V. l
*  ======== Miscellaneous Configuration ========
% B; k1 T5 Z& M2 L" A; I */8 V( H7 |8 ?: g
6 O4 _% d2 g8 a- f2 e
/* set default diags mask */" V% ]1 h3 B- u0 r  ?2 Z
var Diags = xdc.useModule('xdc.runtime.Diags');4 @0 h* U: O  U! O+ Y' e
var Defaults = xdc.useModule('xdc.runtime.Defaults');( W9 J# y1 i" L
+ ]) ], n: `) }) F- U0 y, w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) h+ Y% G5 y+ ~+ o1 @
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# T9 p5 G0 \0 _# {) z2 E  `7 E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 @0 ~! S! t8 s" E4 y! n8 |+ QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, i) S/ R- T5 ]& b1 M1 n( o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ p* g9 b: S% g6 k3 K2 s3 f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 r  z+ D) j* R* F7 S- Y; y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 _8 E) C7 m, m& \1 v3 QDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ Q$ D( j; \! F6 _4 R- ?6 M) dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( c3 [0 \) S- R3 {% v; x" bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! N8 s3 J3 y0 s$ HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ w  u5 m7 N* D+ }8 K3 SDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 `3 d( @* X  h6 Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( @! h- G1 z7 Y& PDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, V6 ^- W8 {6 I/ M, m3 T
2 a- X3 d2 I( X# |8 ]/* override diags mask for selected modules */- [( S+ X) Y7 D0 A' q
xdc.useModule('xdc.runtime.Main');9 Q; a3 ^$ Y+ d, d4 V0 ~. d
Diags.setMaskMeta(
8 U+ D# I0 V" x, y9 ^# R" L    "xdc.runtime.Main",7 x# R7 v( V" x* @& \# r( l7 M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" m+ N0 a! b; Y. ]9 H9 h- Y3 K    Diags.RUNTIME_ON
: m# {& `, x# t- ?& [& F);
& |4 B* K7 Q; W( e1 g. F- O/ G! B" l, h% f3 J
var Registry = xdc.useModule('xdc.runtime.Registry');  p, \* R9 @6 A. Z1 w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 D9 d; V: g! A9 g* |" B6 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 h0 ^" o1 f1 j8 T6 j/ B; j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 d. d4 A( R& N- a: Y+ ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 g) Z0 B' d$ E; {5 e2 V* Y& g

1 P* z7 z, p6 v. `/* create a logger instance */  t5 U% f# t. @- r) j1 W8 {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 q% ], b9 f- x: @var loggerBufP = new LoggerBuf.Params();
! f- \. M+ X; v+ Q( B4 V+ BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 [& X: {& n# T' O3 x6 M- iloggerBufP.bufType = LoggerBuf.BufType_FIXED;* B+ _; a3 b# i. W) c* u0 ?
: l: g$ c/ D& G# e4 M6 R
var appLogger = LoggerBuf.create(loggerBufP);
$ |2 \5 w9 J: [* j: c- D* OappLogger.instance.name = "AppLog_Core1";' |& O/ _0 [  c2 t% }* T  S; Y% f
Defaults.common$.logger = appLogger;& L: R6 a0 i1 a, f& h: e, j6 Z
Memory.defaultHeapSize = 0x8192;   
* w" r9 I5 ~) X3 v3 GIdle.idleFxns[0] = "&LEDStatus";
3 |7 o6 T# [/ a& f0 H! y* rCache.initSize.l2Size = Cache.L2Size_32K;
9 L9 R, g% c* N8 M, h
6 u4 [7 w. t. A: V2 _+ N4 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 */  f1 A4 h% I" `! a/ H& b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ N1 v' X& e$ |
var heapMemParams = new HeapMem.Params();
0 `- V0 {3 C& m+ aheapMemParams.size = 0x4000;% N( C+ v0 i* y' G& J6 v; N
# d% V0 r! q5 |( E. P
var Memory = xdc.useModule('xdc.runtime.Memory');& o0 B+ B9 H: ]: [6 i( S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ?! J+ E0 e& G; |/ H7 n$ h9 U  D# \
我大约calloc  每次共计大小为5K*16bits," V, X; y6 G& J/ W1 O% u. s- z
而默认配置才0x4000、需要改大。
1 ]" ]0 O9 i/ t4 m/ M  s! h8 @2 I9 w5 H2 C0 s6 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* t& X7 a' W- e% P  lProgram.heap = 0;  P' ]8 i+ r- i5 b1 a
Program.argSize = 100;  /* minimum size */# H/ F" _- _3 f/ i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 19:33 , Processed in 0.041679 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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