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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. q; B" ~1 H' U0 [* x/ D: g, F( k3 S  |( a/ i( Q+ Q, K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 W6 G7 s5 Z# |# S  U
  P7 [1 \. \7 s( @+ f, ?3 p% y/ t" R
其他程序段。。。。。, [0 o, N# @, d, X: M
+ t. P+ Y( \5 B9 K, n- o  j
   free(x_d);
, ?1 U& @! y1 _: l/ p  P: g& S. \+ Y" u; |. @" f
使用DSP侧单独调试功能,验证动态申请没有问题,& s" \/ `# N1 S& _; Y

4 `, F. y& y/ o# \4 O; V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 [+ j2 z1 C: w9 U) u! a
; R1 O0 B+ e- o( V: h4 R
& L8 d/ R3 t/ Y' c! c& @0 l; B5 a/ Q  s
& ?. h' Q' m" @# D8 K$ R! d
: Y$ P, }* _* \, l# X, G) ?
; F+ i. i6 m( x; R3 m
/ }$ G' ?4 f4 V7 s2 t
" J/ `. X2 [6 f
* p, H& |" I$ r! K
. T6 v% }) e7 Q2 M  g$ F4 S- `
2 Q- a" h2 p/ b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" K9 ~) ]6 s7 a, M. Z- v5 p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 g4 _- A/ `& Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 J4 t5 w1 U  ]. Y8 Z4 z& F2 e4 f

# f- Q7 c9 \$ [' g. J是不是需要在DSP.CFG中进行配置& I$ ?6 I" `& b+ ~2 |  P$ X
我现在的配置为2 k6 o4 w( I. Q2 U# p7 r# Z9 j

* r* h# s  K8 K/*4 Z: G+ B0 H9 Q* v7 P* j! l6 ?9 P& l
*  ======== Operating System Configuration ========
; h/ r6 x; T2 p */& Y, ?! W- o# u6 ~& U$ o8 e( d

9 W( c7 D* b( s/ q+ Q; `' I0 ?# E/* no rts heap */
4 g: a7 y9 m1 H, q5 H% t  z9 ]( Z. vProgram.heap = 0;
  s& J, L0 q+ [' _3 W$ i. S0 @) TProgram.argSize = 100;  /* minimum size */
- t4 ?! F: Z7 h1 N! gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* x# r& t4 w% Y$ Z+ z0 x
' X( u5 J0 e; m5 n  Y
/* create a default heap */( d* `: u  \; f% l4 C6 d# m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 [% j9 A: r6 d1 R& @2 n. B1 }
var heapMemParams = new HeapMem.Params();- N5 ]) J) e/ E) x3 o' U! o, N, ]- V- z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) r5 T! M7 i6 }; P, F
# C/ U: n, Q4 E) w. a
var Memory = xdc.useModule('xdc.runtime.Memory');
2 K" X& Y0 E3 t2 m. U( h6 S! ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; n9 z% F; I  v0 F* R+ Q

+ V# [0 [$ a$ {; m4 L/* configure System module */
" ~7 S4 U2 w9 @$ yvar SysMin = xdc.useModule('xdc.runtime.SysMin');, c( O* R5 B; j! P8 I
SysMin.bufSize = 0x1000;
0 R0 {# z- n$ bSysMin.flushAtExit = false;2 R, x. ]' U$ h
# s; Q, n% U' l- G$ ^: F6 M
var System = xdc.useModule('xdc.runtime.System');' v# A9 A* l$ I( _, e# C
System.SupportProxy = SysMin;
+ A! M' O8 }" R& U* A. c5 f6 \3 G' D! i  W: W$ O9 y9 h
/* configure SysBios to use the lower half of Timer 1 */
% R. B1 F$ V4 f( X3 V5 [0 [! Q) nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, [. d. u5 t, `) y1 w0 C) z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 K( V4 z2 _  F, ?8 `* m. q
Timer.timerSettings[1].master = true;
7 V2 t4 D8 z) [; t0 C4 Q1 PTimer.defaultHalf = Timer.Half_LOWER;
, D% a4 b$ C6 S. a' o, t9 wClock.timerId = 1;
, u8 [( x/ R' i  P3 o( ~
4 Y4 L  F% F" S) I* i1 P! ]0 Y/ \
/*
: ^# W1 X+ R. [- J( i1 k *  ======== Miscellaneous Configuration ========
$ ~* ~2 Q+ s& w: T* Y" `5 w */
9 _: U% j/ Y7 o
) b3 o1 X& [: l0 [+ w5 n% x2 D/* set default diags mask */
* D" v' C  v- |* U( Wvar Diags = xdc.useModule('xdc.runtime.Diags');
* ^8 B- g! _& Z  R& E3 W% b8 cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 m# [8 n2 z1 x, D$ X, D
6 z% ~$ n! o" H" }9 HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" B- o) z1 ^! i% @* O4 j' |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& g" k+ `! E, n) i9 Q6 D0 ]3 SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 w/ c1 [( R) EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& ^4 w) Q. w9 x! P( I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: f* Z0 A. s  r2 k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ G/ p* b) l  E) u3 tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" d# K$ M3 g3 |* S+ B% f) z* x; ^- c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: d7 g4 ^( r: M0 D& p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% h( F! ^: D9 X/ l6 K; M) }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! W- l: n7 L; gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 t; k; _6 G0 ?% Y/ X. L) tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; z7 v0 L# l8 r* I/ S% \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' `9 T: N8 j2 `( }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ q" g- S; T2 [8 ~8 s: A- m* C" P
/* override diags mask for selected modules */: b8 o2 i! `1 m- w- s$ A& x
xdc.useModule('xdc.runtime.Main');+ U, _- R6 W/ h: r) M0 Q1 o6 r
Diags.setMaskMeta(
3 d, p9 {9 J! K) o8 m. E    "xdc.runtime.Main",
+ E' e* s# a3 G; ?; y" ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 ?; I& `9 k( U8 f+ a; w
    Diags.RUNTIME_ON
* e, E2 L+ ^$ U% d);
6 K( Q8 r7 t$ k4 A' |9 W7 D$ c% ~, t: E9 Z) E# H  g1 R
var Registry = xdc.useModule('xdc.runtime.Registry');, n8 V) {* R" F2 s0 _, r8 R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. c2 }2 f* O% b8 A' j/ i$ o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 K- s- ~: j8 G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 ^1 z! a: n. R  ^( q' \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. f1 B. c& i( g: E
/ K- Q) F6 B% A7 @' A/* create a logger instance */
7 K0 C! \" V+ T2 M. q5 ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ \: p! m  \! `6 ~& N/ h! y
var loggerBufP = new LoggerBuf.Params();
- g4 i9 y3 i2 O; F, ^; JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( F2 H; S' E. o# \" @loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ y: T' q1 U' R0 M: e, S

9 k0 j4 F9 O* uvar appLogger = LoggerBuf.create(loggerBufP);
& Q- y! o0 M& P  R; }appLogger.instance.name = "AppLog_Core1";! V; Q% k. G9 j5 O  d
Defaults.common$.logger = appLogger;  \7 p" @: s8 J, \: I
Memory.defaultHeapSize = 0x8192;   
# `' j- l. C: f1 I0 ?* w1 u/ IIdle.idleFxns[0] = "&LEDStatus";. ^2 T; `3 I9 }  H
Cache.initSize.l2Size = Cache.L2Size_32K;2 E/ |, U. n" ]8 e' ^: O" b( u
4 u2 W% Z8 v% ~  k
回复 支持 反对

使用道具 举报

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 */! _* z% M9 S5 k- b7 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, r' r5 E7 K. k% e
var heapMemParams = new HeapMem.Params();
% g" w  Y/ y- n7 F; IheapMemParams.size = 0x4000;
" x4 g) ?7 l+ @4 A! W. T: ]4 E
1 G* Q' E* [) v: V/ o, ~var Memory = xdc.useModule('xdc.runtime.Memory');  E) e$ @$ r/ L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& |- Q; c. q: S$ {6 O

/ _& F8 b4 P+ C8 y$ {我大约calloc  每次共计大小为5K*16bits,
5 G8 X0 w. G# W4 ^% f$ t而默认配置才0x4000、需要改大。' A3 j# B; w( Y# {
9 g+ }! x$ G+ {6 J, q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" {' r. V; C0 r7 b! q/ b+ o6 L1 dProgram.heap = 0;
2 I4 |! H. D# BProgram.argSize = 100;  /* minimum size */0 h- k0 B7 R# l% h" J+ X
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-14 14:48 , Processed in 0.040654 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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