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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; K8 c6 E* ^# e
$ I" ?& c% \; q. @8 t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! @8 y; F" J) I: c1 g
+ r7 n" v7 O' ?; M$ y, h7 D. R
其他程序段。。。。。
+ c  a" N9 e' I: A
3 q' [8 I/ r" @/ |4 m7 \9 V" r   free(x_d);
( c- \2 |7 A$ C) n; z6 z  Z( B1 z: S( n' `  U8 ^
使用DSP侧单独调试功能,验证动态申请没有问题,, q7 k0 ~9 Z! o1 W8 F& @
0 T5 j/ J) w( X
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 ]6 t5 X# v9 y9 Y* Z7 I

9 Q. K3 M" ?) w7 K0 I' o9 Y8 {6 L0 g- Q9 \- p0 u2 a

. U+ q, V) Y' _/ k1 d3 B0 _: i* M* B& u4 u6 M
, c2 |  w! K# {

0 k* E$ l2 Q2 T$ R2 ?- O: Z5 e8 v& l3 O+ J! q; U

9 _# }; j# L  c4 v3 ^& e! X2 I7 k8 S/ t
0 F1 `  P4 H6 j* a3 ?$ _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& E, C) K  m& t, j  s* e- j$ k% {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 n* c: I, }5 Z; K! b0 T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 r, b3 }9 B, B) y: A( s

: p0 |, n' S: k是不是需要在DSP.CFG中进行配置
# t- l; N3 J- y. _& M6 I我现在的配置为
- O1 V4 w. a+ ]6 E& X" [5 c! v2 R& o) k: L0 P% |( k, H  H! n. G
/*- j' e9 g3 G1 `2 F4 }2 ?
*  ======== Operating System Configuration ========/ K/ U/ h  M! u7 A. A. \7 K
*/% v* P- N9 o+ [, Z" }

: g1 K5 f+ f! t2 ^/* no rts heap */! B* r- J6 C+ S2 a
Program.heap = 0;
2 t2 e7 ~& z, Y; |* \/ U2 [Program.argSize = 100;  /* minimum size */  N7 c' V' c+ b+ O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) f: D, H! Y# a, r) C; c

1 E9 P- a  k, @( Y: N+ Q( V+ ~4 K/* create a default heap */% ?: K# S2 m8 g; g' D3 m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; w! E: }; X" v  Ivar heapMemParams = new HeapMem.Params();
5 J* |: q- [9 q8 @$ {; m, lheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, d$ c5 A  q4 s$ A' }) [2 c0 r! h& |  g2 R: A9 L# J$ Y& t
var Memory = xdc.useModule('xdc.runtime.Memory');
5 @* h# Z4 G6 _* F1 @. iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" t" q; n! U3 O  g9 Q# F+ L
5 D: D( `/ y1 V" P, B. C
/* configure System module */7 D$ k1 q, v# Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. Y8 P$ |, f' d) r. S% H+ {SysMin.bufSize = 0x1000;
1 W1 W) j; A  QSysMin.flushAtExit = false;) A  D6 {' E; ~3 P6 B8 G+ S8 G
1 x, y# p- ~5 I  t) K$ m* \* k' D, D
var System = xdc.useModule('xdc.runtime.System');
% S% p4 w( D  ?0 m. z1 aSystem.SupportProxy = SysMin;+ n7 Z4 w" U/ t" U

+ x9 u( s* I0 S9 n9 E6 s* |/* configure SysBios to use the lower half of Timer 1 */
% Y+ f/ N7 L2 w5 ]' N0 }9 Zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, J, W1 J% `9 Z8 U$ p2 Q) j8 Y0 r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ D# }  P* L1 e+ Z9 q4 STimer.timerSettings[1].master = true;
& t( p/ e; i& U: T; ~Timer.defaultHalf = Timer.Half_LOWER;' q- |6 v9 q/ v( l  j* X
Clock.timerId = 1;  \! U) k, O0 a! p) `* B
7 C& m( j% V( G# L. z1 G
, W) D  r5 a: z' ~$ z( ?
/*$ t+ {( F! Q7 V& b* }! m  z
*  ======== Miscellaneous Configuration ========
# T6 }9 d; e! p& b6 o9 ]9 Y */! ?+ ^& v& J: Z; w" g

: h' ?) H) M9 _- h- j: Z% w1 \/* set default diags mask */
: y  p/ _7 t. |6 [4 |var Diags = xdc.useModule('xdc.runtime.Diags');9 @4 x0 P5 V/ ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 w/ k. Q9 d0 I/ Y$ _  s

6 ~0 N- P2 {; oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, ]( {5 b3 ^, Q9 p) A( q( J1 E
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 N  q2 u) }# f0 QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ J/ Q+ ~0 b2 Z  L& O) q2 K' W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 O' b- d, H8 b! x0 r9 }! ]% s1 H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& r) I5 h; a1 ?- D( x+ PDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 s  }/ N! R; D2 A, |% KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( O# X* O' r9 P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ f9 v' K: K9 O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 o) {8 s  h* U" t) B- I% ^% r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ p, Q" P2 j# S8 Q. qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ h( @; |' p" Y$ a# B" \& B( rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; j+ B, ^- S# U4 q8 R1 o6 w# ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 p% e2 B6 C6 F! y3 e& |, U# ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: {2 D3 g4 L% t/ }, b$ ?9 T8 \% d0 ?' R8 n
/* override diags mask for selected modules */
7 R# B0 t0 E. G$ bxdc.useModule('xdc.runtime.Main');- M+ y, d9 U6 v9 k' \
Diags.setMaskMeta(; x  w: {+ t  z7 q* Y& R
    "xdc.runtime.Main",
5 R& Q( K4 ^  h4 F* O. U    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ S' R: e4 F4 O
    Diags.RUNTIME_ON
0 ]) @0 f* [+ r; j# ~9 Q1 [);
7 _+ V% d1 ?2 z  [0 Y5 ^6 h6 J) G4 j+ U
var Registry = xdc.useModule('xdc.runtime.Registry');
3 @. L  l1 S% k3 B0 L  v" zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ M- n8 ~, [. s, f9 d, s4 I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 x' U! L3 v/ g0 L& n; W: MRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: D) e$ N4 U9 E, y& r! f% `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* i* X5 z/ w6 J9 j9 X! N+ Y
0 C/ k- O; Q) J
/* create a logger instance */
9 d: ]/ q1 }4 U8 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" N. O4 B6 b' t# _9 Pvar loggerBufP = new LoggerBuf.Params();
# J& ^1 {0 ~3 e! C, j0 |7 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 e  k$ Q4 O! d3 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;# h' w  d9 s3 q& Y

' M) Z2 P/ ?: p! ~var appLogger = LoggerBuf.create(loggerBufP);1 ?  i! E; p# D5 h: h& G
appLogger.instance.name = "AppLog_Core1";4 F) c) U& K) l, m' m! P( O* ?
Defaults.common$.logger = appLogger;
% Q; H; p6 \; R* m, G4 kMemory.defaultHeapSize = 0x8192;   
7 g$ v5 D2 x* A# Y5 d" o9 x& |( qIdle.idleFxns[0] = "&LEDStatus";1 I1 u. m- l$ }6 r  R4 ]+ ~
Cache.initSize.l2Size = Cache.L2Size_32K;, s4 n( J, s: Q
" J- [7 t: u6 O6 \# \  W9 h
回复 支持 反对

使用道具 举报

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 */
8 t% G" M* j- C. |: ~5 q0 U5 J6 lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& u& C! K% G0 ~( g; y- p0 }$ U* Q
var heapMemParams = new HeapMem.Params();
/ m, c3 K  H! w( bheapMemParams.size = 0x4000;. u3 ^% \& s( z. P) ^

# W1 i& z$ q4 \: S, O7 zvar Memory = xdc.useModule('xdc.runtime.Memory');  u; y1 [# m! C5 H) p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 W4 V( a7 c! S# T! p5 I
% w. Y3 b3 W4 F& ^2 I6 P9 m' i$ @6 Q3 ~
我大约calloc  每次共计大小为5K*16bits,3 P' S  M% U* Q# @
而默认配置才0x4000、需要改大。6 i$ _+ K: I- h6 q5 f* }+ R

# h* }! t" X% M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  E" p) x) |% F/ y6 v+ e- A
Program.heap = 0;) ]$ Q( Z- N- C6 Z3 K9 R% S0 t
Program.argSize = 100;  /* minimum size */& W. z# X8 ~/ i( L4 M+ b1 v5 B' |2 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-28 05:08 , Processed in 0.042848 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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