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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

1 f: {0 d8 R) d! u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' P' P3 o/ q1 q- E- n9 K; b: o# K/ y, F; C
其他程序段。。。。。, W& O. r4 @# W" U& V2 b0 f) d  P
0 _/ @. r+ V( j+ k' v+ m5 n& m( x
   free(x_d);7 V, y% u; c% V; }# a) n+ w8 W7 f
' A: W- I- y) ]1 ?* L/ A
使用DSP侧单独调试功能,验证动态申请没有问题,
# S$ r8 W; x' e. n+ Y
) _; g6 e& ^; B7 v2 I, X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 X2 l* S, j& K6 z
* r% @9 o8 d; [

- ?2 U7 I' @% e" g' ~7 s( m3 z! q) D6 K: q! f  s
9 l; F! E1 J. G- P* e
5 z4 W( j+ a+ ~
  L- z8 o+ k% c, ]3 i) _& B2 A

+ }' y$ F* t2 ^2 s) b6 j! A1 f, r; G; y; n& v1 C

5 J  V# `, i# J) D" f
9 Z/ i2 k! u3 q+ s4 I; A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: L# n+ Z% i3 y0 H% ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! e) @0 n$ f: S  b- }( P) |5 c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 a; G& ?  R2 z, B6 S

  O( c2 a; h  N是不是需要在DSP.CFG中进行配置) x& U2 P+ |$ K2 _, N
我现在的配置为5 b% p/ o7 Y- x. q+ @9 j: X
, P9 B! m2 l$ F; M% l3 z. V
/*
8 u! B' A3 J) s+ E *  ======== Operating System Configuration ========
& e  i# q1 e/ y* m0 C */' x* m, |( I5 T! {& w0 ~$ i' z# X
  G1 L5 G* {$ I: ]2 p
/* no rts heap */
3 \2 y6 U/ U* _6 u; |Program.heap = 0;
$ W0 i" U: D( JProgram.argSize = 100;  /* minimum size */4 t9 M6 Z+ f! l- T& z2 p' I; ~
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# @% Q2 ~+ }3 M
1 a/ `( R: P+ |- j. v: y5 @/* create a default heap */% M- Y6 Q. B% L, @% \7 m3 E8 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! R3 J# H2 e6 n/ D7 j2 @2 Cvar heapMemParams = new HeapMem.Params();+ s4 g  N( v* D$ A# H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 o; j( k6 u$ G4 r: r. ]

7 V, T: D4 e4 N* |' E$ d. g$ m
var Memory = xdc.useModule('xdc.runtime.Memory');
4 p! M8 M! e5 i  h' ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 K, D5 m+ `9 s# V, M4 p
' `; w0 L. H- K8 v) l9 Y! ?  z
/* configure System module */
7 W1 B* D$ \5 ^4 E1 Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
5 \2 X, x8 j. ]" S$ a0 @6 L7 NSysMin.bufSize = 0x1000;
1 W6 J4 s" R" E8 cSysMin.flushAtExit = false;  J# U/ d% h: @9 y: |
) s9 T/ _, Y( m+ ^5 ?% c, U  ^
var System = xdc.useModule('xdc.runtime.System');1 E& O6 T9 b  `( d7 R
System.SupportProxy = SysMin;3 e$ u5 Q0 ]0 i2 h; S( l7 a9 T
. V. d& F7 x. ~9 U3 I- V
/* configure SysBios to use the lower half of Timer 1 */
' U6 P* A4 w" y+ b3 R  ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 R: C% g6 @# O8 r5 p
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 }( C/ D1 [1 iTimer.timerSettings[1].master = true;( @2 Y; ^2 m& o1 ?
Timer.defaultHalf = Timer.Half_LOWER;
3 X1 K: d( U# [+ ]* PClock.timerId = 1;
' o! I9 h& J% g9 w, C. Q# ~3 {5 O( J. U8 h- H1 i' A
$ D; h! p1 |; ~( k
/*1 g: a. R- m9 w& B
*  ======== Miscellaneous Configuration ========
% N) T- C/ W( s" V3 ] */: U2 ], p( A' p  `) B  H: e
0 P& G7 S' h  x! M2 o5 v
/* set default diags mask */
  Y5 Q& `5 v$ W: d9 jvar Diags = xdc.useModule('xdc.runtime.Diags');5 C6 v, M0 ?  n. h# _: z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 J8 o' i( D/ p& w. Z9 L- A  _, J; `# d, M# I- B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- ^  ]0 T, b+ Q" _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" w# L8 b; g  K! {8 A, Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 a* R* G4 y4 O8 W- HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 \/ C; ]' U, R2 C6 U* F  a3 {) w. Z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( E' J% Z5 `6 e, J" eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) u! z3 E* Q3 a* d1 QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, `" h5 @9 u+ d5 v4 k
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 v0 E( a- q2 z- u+ L# ]! h2 ~6 C0 K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 T- \2 T* Z* v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( J, W' m: q2 c4 [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ J$ E8 a% L  y: `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 U  F+ H; C  q- y( r* M# S: h" cDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ r- G. r) B+ G, f5 z# h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) [+ G7 X* y- h  ?8 H) N
. t8 N( M7 U" R
/* override diags mask for selected modules */: ]; H8 k/ Y4 x( M7 {
xdc.useModule('xdc.runtime.Main');# m8 I4 |- Z6 H" G. ^/ N! b4 ^
Diags.setMaskMeta(
% n) |* W* h# `4 q  b' c& W    "xdc.runtime.Main",
6 j6 U( i% ~" K2 U0 H' j    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. ?. l& f7 g1 g  F' u    Diags.RUNTIME_ON
8 x2 X' U- i, g);8 {/ |( M2 c$ u2 |% S
' V+ `* J2 Q2 M
var Registry = xdc.useModule('xdc.runtime.Registry');
/ ^  X: J) \% ]) WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 y' Y) W0 C. R9 ?: ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' p% R6 W! g6 \/ S8 p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( k+ F* D# _+ j7 d4 `7 X0 _1 CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( ^; V3 J1 |5 U, G+ b9 h0 Z9 f9 g$ K" T$ C' x. y
/* create a logger instance */
2 M3 f- N! H: ~' yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ y( `, y: R+ R2 a5 \8 vvar loggerBufP = new LoggerBuf.Params();
5 c5 w2 z% m+ HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 q% y" t* D9 O  mloggerBufP.bufType = LoggerBuf.BufType_FIXED;- I& U3 Y# K2 R& I- d( V! O+ r
& v- l8 E$ f. E, L" Y9 j' B* u
var appLogger = LoggerBuf.create(loggerBufP);
) @' E" I0 u0 V7 n1 S  kappLogger.instance.name = "AppLog_Core1";
; q1 G$ X4 y1 H% p$ M. x+ u5 y- nDefaults.common$.logger = appLogger;
# Q! T; L% Y: _. }Memory.defaultHeapSize = 0x8192;    - r' M- W0 b0 S
Idle.idleFxns[0] = "&LEDStatus";
8 i. H1 u- W  [3 f" A! b) C6 LCache.initSize.l2Size = Cache.L2Size_32K;
. o) a9 n' z2 _3 ^+ s( }5 q0 V- a5 }' Q- g* Y* G
回复 支持 反对

使用道具 举报

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 */
' ~  O0 d7 e2 \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; u; o- F1 j1 ^* j# jvar heapMemParams = new HeapMem.Params();/ o' z1 q! ~. X3 m$ E
heapMemParams.size = 0x4000;( N8 j* `2 v# i: }6 {! o, A
0 [# Z6 Q3 R* V# U4 k. |
var Memory = xdc.useModule('xdc.runtime.Memory');& _" Z0 h1 y+ T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* A4 }8 L0 G6 L: m

6 @2 ?* }& ^+ q- r我大约calloc  每次共计大小为5K*16bits,
2 g- _  r, R0 F0 Y% ~) O而默认配置才0x4000、需要改大。
, B) w4 R* o* ^$ g( I
0 I& \1 h0 [9 I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) N9 [- |( Y. ?: r6 c# i, K5 iProgram.heap = 0;
+ O5 x( ]  ?! x1 ~5 vProgram.argSize = 100;  /* minimum size */
- }& ^1 Q6 c! ]5 k0 R( s3 Z+ WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 14:37 , Processed in 0.057824 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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