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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; X" _0 q! d2 a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: A/ [- i$ K: C9 K5 E+ I2 O$ \# X% E" m) I/ s# {
其他程序段。。。。。
, Q$ ~* x0 }' f. a- H. O- y
. \0 P& Z$ m1 z  v$ g2 k$ Z   free(x_d);! ]8 o' }( S/ H2 u3 a1 i

( a  Y$ k; b. r9 d5 L, c使用DSP侧单独调试功能,验证动态申请没有问题,
7 T0 v9 x& C3 e" [( }5 W8 b7 ^9 m. ~  e# t# n5 {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# @# ]: |$ A5 u
% e) W6 f6 \7 j
/ D* l  Q2 g$ D3 R+ E$ N; d$ v* f

" I* V) S. Y, [: ]- o- G& I1 `0 ^  @- S, P

$ x5 L2 ?7 Q& s4 F! A# F1 A
: i4 y  \6 z/ T& Q3 R
0 K0 T  \( p  V, J
9 `, G: h& B' U3 ^, V2 B4 _0 Y  c5 W
  X; h( n3 o# v: l! a
+ Z7 E% K3 y* k/ e. Y2 \  K$ w: m+ s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 V) L  Q* n: Z/ X' v6 E7 P% B% P. ^5 X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) w& m) s/ t  s7 F0 @; w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 ]1 P+ m4 x& [) K+ u2 H+ b

2 y/ m& E5 d) R! ?是不是需要在DSP.CFG中进行配置
' @8 ]" O  ^% \! q- \7 b0 |% @我现在的配置为
. K  y" u" R* A( @5 m, f( A  s1 E  O% i' r% P! X
/*
7 L& I% E! e! q) f. h *  ======== Operating System Configuration ========
% P/ c  Q9 g/ K1 ?; G */
" A, w/ [( k2 B- n9 z# `8 r: I  C3 Q: W* \0 H0 k
/* no rts heap */
4 ~2 u1 O' [( {4 y$ S% QProgram.heap = 0;, P" c  l: w; ~0 Q! O- _3 r, z' D' o
Program.argSize = 100;  /* minimum size */+ Z% W7 v$ ^5 X% n9 B, F* q. K8 |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: _' Y1 H" E( l$ }* i
  m1 {/ x0 C6 u: N
/* create a default heap */9 x3 p3 V' T) w, a& d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 H# \: ?! b. ^
var heapMemParams = new HeapMem.Params();
- V/ \$ X: D" y/ B  }" iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 ~. n8 ]9 {3 T; d1 p1 N/ J% O

8 Y! [5 F- u; k) }! g6 e# j% o
var Memory = xdc.useModule('xdc.runtime.Memory');0 y+ A0 O. f4 J; k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ u7 s& L& J/ K" ?+ y, w1 {; k* Z

2 ~& G5 h& f" s0 O' Z, K/* configure System module */
0 O1 M6 E- N% i8 dvar SysMin = xdc.useModule('xdc.runtime.SysMin');4 @) k( [7 v6 m% u3 u; q; C2 i
SysMin.bufSize = 0x1000;
% @/ n6 q; C% JSysMin.flushAtExit = false;
. {5 _# h0 o- S$ ~+ {8 S
1 b# w. X, Y  S% x2 k" [var System = xdc.useModule('xdc.runtime.System');% S/ ^/ U% m7 p  L. j
System.SupportProxy = SysMin;  e. W' e( y9 }

0 M, \3 ~9 L6 ^" q2 i2 g/* configure SysBios to use the lower half of Timer 1 */3 U  W6 I' R4 j5 j$ z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, i5 \9 @8 B8 f$ [5 @# P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 r8 Q! X* B+ ]8 [; M4 q4 M5 J
Timer.timerSettings[1].master = true;- V/ K  ^! L& \3 N
Timer.defaultHalf = Timer.Half_LOWER;
* F' ]# E; F9 e' X0 Y) _Clock.timerId = 1;
+ K+ |+ y# X+ P4 N6 V5 {) `- [( C$ l8 \# x! V
! y) C" [4 h* S& t% f+ }2 {- M
/*
( I7 A8 b# t" O6 t. a3 E6 G *  ======== Miscellaneous Configuration ========" m0 v4 a, }" P7 X
*/
- D% P6 r3 f: V: F: l. d$ \. b, S  e0 k9 X, @7 v
/* set default diags mask */
; f& N4 C! R, `+ w4 C7 i0 ~var Diags = xdc.useModule('xdc.runtime.Diags');
9 ]" \+ C- F: m% l% l% Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');2 l" j- s7 T+ M0 Y7 t

( \( H+ O! O" N" |+ X9 D- VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; X' Z6 C' d, @7 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 u# z! g, V% `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 U3 R/ P! X) s0 c- tDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ [) a9 j# r! h, \5 `  rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: S% I) f" n; Q, X" x" o5 l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 C0 u( {5 j; m7 Z4 r" hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 _' b* s5 g5 S& W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 M% C; F# _2 ^8 NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 u) @4 G# X6 f1 w3 W, h9 mDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% C) R' I( W  B6 z& ~, D! q4 M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( G  B9 L' D6 S/ q/ L' iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 }8 n5 e+ z" V- F: s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( r7 h& N; U' A9 h9 c; K2 X) j! FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. c5 W8 K; B+ G, t- y5 h4 h

  M* W* ?1 ?$ s4 ?& s( d/* override diags mask for selected modules */
$ {* @' ~+ }2 B8 \$ n8 |xdc.useModule('xdc.runtime.Main');, L9 f2 y3 M1 b2 y$ w* s
Diags.setMaskMeta(
( x# P- b5 p* |9 _# y  x' @    "xdc.runtime.Main",
' N( g+ Q* |& f    Diags.ENTRY | Diags.EXIT | Diags.INFO,# S: B8 F1 r/ ^$ O
    Diags.RUNTIME_ON
' R' G6 b" c6 a- j( g) ~);
, @$ w, m4 h7 U' d2 F3 \; \+ ?# {/ c9 |1 o" H5 D
var Registry = xdc.useModule('xdc.runtime.Registry');
  V# Q8 K/ v1 hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& y: k+ q; A+ T. e3 c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  f7 f7 U  e+ f+ I2 m& W+ q! i0 I2 e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" _) r( z" s, R) y, z- E* L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ P" O* M6 Y2 H9 i

$ T; T7 L% u$ S7 M4 f3 M/* create a logger instance */% X; L; w/ H) [. b3 w4 [( H
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 T- V0 o  r; ~$ B2 ]1 ^var loggerBufP = new LoggerBuf.Params();6 y% O$ Q" E# h; {& ]) N; S! s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 g% l8 S  d; S& `) [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) t$ R/ O4 H& ?" a, z
2 E) D* x- X2 M! s
var appLogger = LoggerBuf.create(loggerBufP);( I* V( i% [, @: z
appLogger.instance.name = "AppLog_Core1";
' S0 c7 z8 T: _# o6 b) Q5 CDefaults.common$.logger = appLogger;
* l' B# l' G1 m; X# }: xMemory.defaultHeapSize = 0x8192;   
, t  Y$ Y7 V( W6 ^Idle.idleFxns[0] = "&LEDStatus";
( z7 ]$ U3 Q0 o5 |" [/ ^8 QCache.initSize.l2Size = Cache.L2Size_32K;
/ i- h7 q+ N2 Y* ~: R8 ]7 s
  M, X9 x" g4 g1 l
回复 支持 反对

使用道具 举报

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 */
( k- o* [% @1 dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  A/ c8 G! ^1 X. R) W
var heapMemParams = new HeapMem.Params();+ Q+ K3 ~6 s! o- v& @
heapMemParams.size = 0x4000;; ]! j, ]; \1 b3 ^5 \

7 H4 k& R( h7 [var Memory = xdc.useModule('xdc.runtime.Memory');
! V7 z3 \1 o7 u  @$ [& hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 w# P+ m+ R- Y1 g2 Y
* L; Z3 n2 I* {. F* j: ^; y我大约calloc  每次共计大小为5K*16bits,# u* H7 s- y3 C6 c& U
而默认配置才0x4000、需要改大。
4 e( K& R/ y4 D2 ]' u2 B3 @" w5 W7 A* P$ `5 A! y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 _, P  N! O, k; A7 {
Program.heap = 0;
- A/ v  [/ J& @+ ^: i) zProgram.argSize = 100;  /* minimum size */
! U+ g) p* j  sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 16:35 , Processed in 0.040685 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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