关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& i. k: Y, z$ a

; k) Z- _. N  E  Q, i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 W% N7 S% P: f% `
$ T6 W2 Q  D9 b% I7 Q8 C; @' ?: J其他程序段。。。。。9 Z: P; ]6 I9 R$ [/ T+ h9 `# e4 a% e

8 W0 U$ k, H# O2 u2 r& e; k   free(x_d);
; y; B5 m$ \- S+ b* X4 B3 V4 Y
* }1 g4 O2 M* C# b2 k3 d: \使用DSP侧单独调试功能,验证动态申请没有问题,# Z$ i1 M8 t; h4 [
# y0 @6 [  k7 `8 t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* F) @6 E) b3 |6 }6 @1 K6 Y
; a/ y3 S8 R) T- c: `: a

' |* I* `9 s/ }
. K# z# F8 h* b" _. ]6 j8 @
/ r4 v1 G8 ^7 J* `" \, |6 x) Q8 `/ R

/ T* R( U$ i5 b8 ~1 e, v) E
: X  @( _, h3 V  E$ ?$ X+ a' S0 w

/ e" h! k: u" G
) v! ?! k. ?1 f0 A; P' ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 O1 C: U7 f' L- }* u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: d( L2 |% Q- L5 Z) y# d6 x- d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ \4 l1 h+ T* g4 R* m: K  I

/ n5 V  A7 s4 ^& T8 N& L  J是不是需要在DSP.CFG中进行配置8 f. M5 n  o/ U
我现在的配置为
0 M, x; T( o/ {3 {- ~* m" _7 g  g5 z4 K+ y2 I
/*
$ s+ T8 Y/ \5 D8 u& V: s3 S *  ======== Operating System Configuration ========; R3 @1 M* {& g- |* M3 {0 }  ]
*/
1 Y- D! ~+ K1 M5 g; T7 Z% V" J( t) w; X" N# G& I) W
/* no rts heap */% s! e& |$ Q* a$ X( S; [- q
Program.heap = 0;
/ @# P& H# f7 M$ w. S+ s! c& fProgram.argSize = 100;  /* minimum size */& S3 Q, z5 Y3 t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, K: ]) `; v4 Z/ v0 x; W

; ~& F( }2 }7 f' X/* create a default heap */
3 r* \: ^; L( B& }2 svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  [! U' w( K! R+ Evar heapMemParams = new HeapMem.Params();
3 r9 }0 }/ f2 l! E8 G; q* EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ _% Z$ M9 D) S6 j; i- T9 W7 S; N4 s
var Memory = xdc.useModule('xdc.runtime.Memory');
7 x- K) ^( O: D9 _, R) v4 Y# rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 G1 A" P: Q, G1 Y) l
& N  {, E4 B+ l3 C6 l& z
/* configure System module */
2 b" G& U( h' Q$ a+ kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 _3 P- d0 L- _5 T0 M) mSysMin.bufSize = 0x1000;
$ V/ B! C3 X  `0 rSysMin.flushAtExit = false;
+ Y# \3 U6 K: _; u5 z0 A3 o4 o
* _# I$ g4 Y! q. F+ i6 yvar System = xdc.useModule('xdc.runtime.System');
, x, `$ u( v% k' ]9 ~1 R( \System.SupportProxy = SysMin;4 X" I& u* `1 l  {. B' r

% Q0 E6 W7 U# M/ w2 y' Q7 A4 f/* configure SysBios to use the lower half of Timer 1 */' p% d$ [( i$ h& e0 d! F! h" T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ w# m, c3 d* R7 `4 C# D! [var Clock = xdc.useModule('ti.sysbios.knl.Clock');  C  X, L, ^3 I+ a
Timer.timerSettings[1].master = true;
) T/ W# @4 H* d: R' w9 ^Timer.defaultHalf = Timer.Half_LOWER;
( L  B8 I/ t! x4 k0 x! p4 j5 vClock.timerId = 1;
: ?- X: u- V+ W: Q
. m/ a- d5 q1 X7 |3 X" Z6 p7 W: n  w! \! W; r9 A  Z% |7 K2 L, _6 x; h
/*
# K! f- d7 v9 D7 ^, v *  ======== Miscellaneous Configuration ========
) Z) M; r! ~: H */5 B: k) u0 r2 v% K8 e. q1 U
% `0 o# `6 n4 f& C+ k
/* set default diags mask */
2 w( [% G4 M- z% uvar Diags = xdc.useModule('xdc.runtime.Diags');
1 y4 H8 S2 U% X! k( e& J% ?var Defaults = xdc.useModule('xdc.runtime.Defaults');+ K# P7 P, T+ y: E! L8 {
: _3 L9 B. Z1 j# i1 X7 m
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; [3 C. Z- R, U$ c) ?6 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) O8 t2 H/ @0 ^# h5 ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; F' M  P0 o7 k7 }% l& W: H& G. i2 YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# a$ Z, m; U' l  SDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! L+ i& }" p/ X# p  e. t. Q6 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  ]# E/ m+ `- a! O9 j. S/ ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 D) {5 z5 |5 p( \8 j
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 n- K0 E" }' x3 E7 R$ UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 u1 C2 A( m( V% ], q) c
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 a$ c3 Q6 Z; A% t. u- d9 GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  N) X, |* N: L9 ^! Q" kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 b8 i8 u  h2 q$ v, w2 W3 ]+ s8 V0 Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# Y' A; w) J2 X# H' Y2 e. J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* _$ r+ n' x, O% m! W( T+ E. G8 m& D2 i' z( G  h
/* override diags mask for selected modules */7 D. m$ g' `% \, _3 f0 y3 Y
xdc.useModule('xdc.runtime.Main');
' s1 L7 Z# K" r# c9 E0 m' x' SDiags.setMaskMeta(
+ ~+ ?  X- H* C  A9 m4 }    "xdc.runtime.Main",
9 @8 S2 r4 ~* W/ x9 i7 g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' N9 {; s+ l/ ?0 c    Diags.RUNTIME_ON* X2 f  r. K- I% W9 |
);( @" s7 {" D( {) f1 V; c0 z
8 v/ I* d, p  R0 V  d
var Registry = xdc.useModule('xdc.runtime.Registry');
& ^7 {1 J! Q5 }0 F, ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 }# F3 e! `9 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! Z1 P, |. M& E: h3 i7 H) S' FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 j* Y# a3 ?8 z1 W% v1 A4 H8 q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 T5 V$ J& l2 ], D

. C3 f! J$ a1 Y& h9 p  s/* create a logger instance */4 x6 X$ N3 ^: ?$ V) T
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- H' ~9 }5 A* w7 c9 b
var loggerBufP = new LoggerBuf.Params();
7 s* C2 w1 W" K7 s" _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' A# {) ~8 r+ g" H$ z" E6 [! }loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ W) s1 e9 a2 r4 I5 F' `+ E8 ~4 t% F+ C
) ^, S0 \; R- `5 {
var appLogger = LoggerBuf.create(loggerBufP);% E6 h, V) w6 k3 y
appLogger.instance.name = "AppLog_Core1";
' e. z. n* s: q1 R/ M, ODefaults.common$.logger = appLogger;& r; V6 G0 G5 _' C( Z$ c. e" I: _
Memory.defaultHeapSize = 0x8192;    + F1 g9 t! Y1 t! w. p
Idle.idleFxns[0] = "&LEDStatus";
( A& Z2 L3 S3 X7 JCache.initSize.l2Size = Cache.L2Size_32K;
% c/ x  `$ I& E% G7 _
8 ~/ m& M7 H: ^4 p, v% v% Y
回复 支持 反对

使用道具 举报

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 */; i3 S3 g+ Q# e0 m  Z, g0 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& n5 Y; [% C$ g. l7 x) E
var heapMemParams = new HeapMem.Params();/ m- Q/ J; \( h6 o  z+ E  {' ?
heapMemParams.size = 0x4000;9 B& z: r6 k6 O6 H1 U4 j

) y* D$ o# M% s, Tvar Memory = xdc.useModule('xdc.runtime.Memory');7 q$ t/ H) m$ z9 p" Z+ m: \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# E, g7 X1 M9 U: c

+ r6 _0 Q$ d' P5 j: {& ^) c1 ]# v我大约calloc  每次共计大小为5K*16bits,
  w4 g: W! z& J6 Y$ [5 [而默认配置才0x4000、需要改大。
, h* q6 M8 x" N8 ?& r9 Y2 ?
* j$ m. p. M0 V: Q6 c1 w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 ~) P' K2 ]  m% j. z' f' X; RProgram.heap = 0;+ j. P; s3 I% l3 [
Program.argSize = 100;  /* minimum size */% y# ]2 U/ L) u& r, Y2 v
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-4 04:17 , Processed in 0.042714 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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