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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 F8 l$ I' Z& R4 u, i5 u( q3 i: O0 w
3 [; ?5 E  @0 m3 H3 D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 M3 K1 |% s# B2 D: B
& ?6 N. K) T  `
其他程序段。。。。。0 I1 e) ~3 H/ T2 Y3 p7 W( f* {

# ^  S% g# Z" D$ j4 c, f7 i5 E   free(x_d);+ ]; s- K% w  S5 }% _' |

1 A! a& n- Y2 D# |' y使用DSP侧单独调试功能,验证动态申请没有问题,- }" e8 k6 G, ?: H+ }5 ~3 t
. |0 g  o! O5 G; V* |
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 ~2 m6 x, }# ^  u, d9 P9 s/ V+ {

( y* g- _0 K' }5 g9 A2 a
! w# _" `9 }2 |* u! r- _& N, `
/ Y  [- e* ]! f, J7 d$ h1 {, N7 ^# F& `' d

7 k9 L3 P7 L; [/ V  @4 P1 A) M* I  M$ M7 Y
4 }7 q: q4 G1 \$ |# W( r

) L7 j" A' R% u* S$ L7 E
: a/ G0 ^& U3 {# c- M3 T' U  g- P0 L& N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: j0 V" o* q! }1 l6 sProgram.heap = 0;
/ K! e, m2 @; dProgram.argSize = 100;  /* minimum size */
" W2 o5 {: f4 R3 p* iProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */" y& b  Y/ M3 `7 B( |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  d. q: b+ Q5 p" ovar heapMemParams = new HeapMem.Params();3 r9 H( y3 _  t7 t
heapMemParams.size = 0x4000;
4 {% p$ n. T* h
; |7 n( f0 _& l9 m8 s. m/ bvar Memory = xdc.useModule('xdc.runtime.Memory');
* c" ?+ A, R% \9 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ~& ]0 S' x2 {: T' S+ C

+ d& F  w; l6 r" H我大约calloc  每次共计大小为5K*16bits,6 U% x8 |% S! p  n
而默认配置才0x4000、需要改大。
2 G$ Z1 U% |* d: }" E& x" \
$ D) X7 T/ }4 \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 z, h2 F% _, ~. i, y8 v/ `) D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ ~/ i) }+ y( ^; q' G+ X1 O9 |5 z/ Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 d; n3 A) Z8 X) D
& O# _; [2 Z8 y: U) n: L0 K# a
是不是需要在DSP.CFG中进行配置! o7 k' |9 z( X; n& w: X
我现在的配置为: T* z8 P. U* _) L0 b
4 ]- b* ^# C9 Z/ L0 n1 Q* S3 y
/*
) O/ q( c2 J3 S3 M* v *  ======== Operating System Configuration ========1 F! v' q4 y/ O! \
*/
6 U  j- K2 P/ y: S% L% Y+ D& |5 _  [0 i# D7 o+ [+ ^9 N" V' t
/* no rts heap */
- _4 r& L" ^. `0 n% AProgram.heap = 0;7 @' [# p3 k2 R7 ~) q/ j/ M
Program.argSize = 100;  /* minimum size */
; m  `) M6 X/ _" H$ IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) y- O* y0 I0 P/ p) s+ X1 q* [: @% Y: x) E$ `* B
/* create a default heap */# r) p$ [  C9 d- e* A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 x( e! |. H& a& J! V( ovar heapMemParams = new HeapMem.Params();
3 X) f; Z* `7 _1 p7 E- F& D/ PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 W) ~9 S9 V: S  I8 Z9 p/ |
9 L& g1 f& O# C2 G7 z
var Memory = xdc.useModule('xdc.runtime.Memory');  n5 D6 r8 I7 i! {1 e8 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 b- k" j# |2 A6 z/ \" L1 U0 n* g! J# h) X; f+ M4 M+ V
/* configure System module */$ v/ `- @/ Y" E3 o! y) s5 U
var SysMin = xdc.useModule('xdc.runtime.SysMin');
- o+ E$ y3 a/ vSysMin.bufSize = 0x1000;2 K* J- |) L7 V: p" J( E
SysMin.flushAtExit = false;
3 ?$ y. O- C$ I" U% E& i
8 x5 _8 K! \' L. r) qvar System = xdc.useModule('xdc.runtime.System');, i( {; A# D* C& P7 G; _( O  |
System.SupportProxy = SysMin;
7 c! }  z  W2 o* ~6 D7 ~3 T. W5 T
2 h( [9 z+ w" N* s" h/ h$ Y/* configure SysBios to use the lower half of Timer 1 */9 `0 v8 Z( Y* u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. V5 }+ ]3 a1 Y- e6 N5 [0 a& C2 zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" _2 [5 d. d( k. v
Timer.timerSettings[1].master = true;, N, F8 r6 t; f" X0 O, _# _. s
Timer.defaultHalf = Timer.Half_LOWER;- N. X8 S! }/ t6 ^' [
Clock.timerId = 1;3 P0 }4 R# X9 c# f, |+ g4 t
& `9 M8 z. U# }  Z
- `4 h" {$ o  Z# F' f2 Y: @& }
/*
: h+ ?  S, k8 K *  ======== Miscellaneous Configuration ========
( ^# ]& L- u- N) G */
$ I0 h! D# X) I$ h7 m" q( G& Y; \
/* set default diags mask *// b: W( K: Y( R2 @( h
var Diags = xdc.useModule('xdc.runtime.Diags');) P3 K" k0 `) H& G7 [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; l; O) g5 A' E% d5 ~% N% |. G/ E- l$ z5 g, @! [  V4 `; F5 ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 v$ u5 _3 s4 g+ w. D' G4 `( iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  S1 g7 C0 d: M1 j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 Y' [3 V% Z0 u: T' M; yDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: K% x0 S! [7 Z6 ~9 m3 s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" ~# b4 F# v% \. t
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' z! o! r/ f5 a) F9 B9 [Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ Q% L( }4 p2 t. M& PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" Y9 \6 T% o( G) w' BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) @. A. d: A+ w  z7 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 G. u% W# s  M" a1 x; p/ K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 n$ s; H  @4 w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* z6 |5 O; |1 R8 d) c4 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. `( j0 z' c, v: k, i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 S! T2 P) _$ V6 U) J
# ^* |" u: B7 v! C0 Z) o
/* override diags mask for selected modules */
" q8 V+ f4 N$ A3 Jxdc.useModule('xdc.runtime.Main');
5 E: a4 @& o! o/ o3 bDiags.setMaskMeta(
' [, `& N* L) c( F2 f3 Z+ ^( ^    "xdc.runtime.Main"," t2 W3 d6 ~4 @' W; {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ \! F# \3 w, H. H, Y9 H$ j    Diags.RUNTIME_ON: ?. B8 i6 |9 s: O% R! h
);1 Q: n4 Q& M" |0 q8 s2 t
1 W3 i8 p; \8 W0 ]+ I% J( ]; C
var Registry = xdc.useModule('xdc.runtime.Registry');
: P& V% l0 @' V* e! G) H. y+ n( DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- C6 i. d6 |6 J3 T4 C$ w# t, G
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& a& X9 w# e2 R/ s6 \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: Q; E( [2 j5 H* h6 X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; c3 s4 u" k* H  ~, L3 l. F
" }9 g; e3 V& C$ O5 r3 J$ Y$ v
/* create a logger instance *// s+ C; n; \* v1 i8 {7 a) k! W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. u, T% E5 C" _& t3 C9 j& g2 b
var loggerBufP = new LoggerBuf.Params();
& T1 r# {, v; hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# O4 `0 E9 [* q: \9 g8 b- @: W+ WloggerBufP.bufType = LoggerBuf.BufType_FIXED;' E9 U" T" r6 S6 m

6 R2 Z& o+ J* A, Nvar appLogger = LoggerBuf.create(loggerBufP);7 _1 q0 {2 X0 ?; g$ p
appLogger.instance.name = "AppLog_Core1";
( ~: G& A$ a1 K* @1 ]$ dDefaults.common$.logger = appLogger;$ A! o' [1 j# q- V# Q
Memory.defaultHeapSize = 0x8192;   
# I& W  C, p- d' u# F) K8 `! y% iIdle.idleFxns[0] = "&LEDStatus";
$ j( b' H) S8 a( ICache.initSize.l2Size = Cache.L2Size_32K;
, ?7 |3 T; }; ~; ^% P- U0 g7 M6 Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-22 03:46 , Processed in 0.043656 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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