关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. K) Q# o  H; y) i
7 X% F- D6 v# w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ x5 A% i3 a4 C

3 V% [" r& N+ q" `% C3 T其他程序段。。。。。- h$ Y6 [! l8 g; S( ?
1 C# M- I' w; S# W5 C
   free(x_d);
' U5 e/ c4 b+ b- t; ^9 K! i2 m* S- u( |+ y) a4 f, s
使用DSP侧单独调试功能,验证动态申请没有问题,7 @* g; q& F8 Q" u$ N- n4 l+ w* m
+ f0 I4 m# d: }% j: ]7 N& J* M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 O  Y% B! o' f
- b- ]( U+ w( U! }7 ~4 U5 p
2 B! x: k8 {: Z/ ~* e9 \! Q
/ B" d: I, _+ D' z

& V9 E5 W' ^% H3 k5 d
1 N# z8 p6 O, [0 P  `$ I* h
, E* Q% n( a4 r5 B" f2 _) p. y8 R! R. p/ F
! H. B+ t+ e: Z6 q  c, @/ k
% q! T2 U9 ]) S' V2 e' g" |% F
: \7 m  q! [2 M* H
分享到:  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 */% y' C, V3 ]9 e* X( q! c, f5 |8 t  W
Program.heap = 0;
: ~+ M7 Q9 B: c* }$ X  yProgram.argSize = 100;  /* minimum size */
& u8 ^  i' B: J* R& E& N% FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  ~8 p+ B' S9 g9 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! `% {9 x/ ?# }; G; Q% A, r9 U
var heapMemParams = new HeapMem.Params();' Z- |$ [/ V4 G3 X! E( @
heapMemParams.size = 0x4000;
6 _  f+ J/ q; @; u
; t1 c' X# D/ B" Q7 a& C1 o$ w- uvar Memory = xdc.useModule('xdc.runtime.Memory');
2 ]8 j) J+ o4 pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 |4 S8 c" g" U+ m
0 W6 I) k* s( G. L' S8 \
我大约calloc  每次共计大小为5K*16bits," B: l3 ^% }. J
而默认配置才0x4000、需要改大。) _: w% @/ p% j

  n3 q- m. D4 L) g, Y4 |$ {/ w9 S
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, [: T8 Q  ~9 I( O1 ?; D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" s& B6 ]. Q4 b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 s7 h7 Y; W0 J4 F6 d
6 c( [5 V: {- I: ^8 j( v( {
是不是需要在DSP.CFG中进行配置
% x2 z* q' }/ i% l: i8 F我现在的配置为1 l2 a7 ]: F  E, z
; f- q$ ~$ s! @6 r& v8 L) J: ~
/*
( ]+ k1 r: P! t, r8 z1 k- o+ | *  ======== Operating System Configuration ========
$ x7 x, E; L. `6 y: z# ?& S */
7 M2 g" d2 Z8 j+ ^
4 U; K- A2 Z4 J* K- K2 [/* no rts heap */
$ I2 l9 s6 y$ sProgram.heap = 0;
% `* h7 ?' ]' aProgram.argSize = 100;  /* minimum size */
7 c/ {: Q) t0 ^9 u- E  [Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 I3 s0 ~3 f+ Q# c; L8 o$ U( c% }
9 K0 H4 G. @1 H/* create a default heap */6 V; h9 l6 G/ l: {7 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 l' e) r! b( p( }
var heapMemParams = new HeapMem.Params();/ A( c, i, H. B" C; t. u! U/ U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! c2 n. M7 Y2 C0 \
9 t" z9 w  ~! Z9 E
var Memory = xdc.useModule('xdc.runtime.Memory');$ F6 s6 C5 U5 B/ k  F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 S  @+ l# a# u. ^+ X5 O: b7 A7 H$ K8 l) k' O0 m8 b
/* configure System module */
3 o  |$ U4 P7 fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; v3 H) t1 U6 e  U! Q2 u8 DSysMin.bufSize = 0x1000;; K3 o* r; D) g, v# w0 x
SysMin.flushAtExit = false;
. L0 Q( m/ d6 U* J% Q7 b+ p: j6 `4 B# R7 J8 l3 e; j/ X# H: C5 v! P( I
var System = xdc.useModule('xdc.runtime.System');( L6 d! T. J0 \8 P2 ^) j5 u& }
System.SupportProxy = SysMin;
) f2 z+ l. o* ]/ L0 {9 d
5 C- s4 {5 }% P! o2 B4 H) e/* configure SysBios to use the lower half of Timer 1 */
7 U) g4 k. {) K% Q* }$ T- qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 Y& I6 Y& y% o" Z% y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ J5 c3 V6 z: d" ^
Timer.timerSettings[1].master = true;' Y3 [2 P- E; H  D4 i* [
Timer.defaultHalf = Timer.Half_LOWER;; Y! {5 ]6 X/ Q6 f
Clock.timerId = 1;4 s+ \) W7 i& }" @: S

: T7 e3 k6 z$ |  l% b( L9 A" ?0 s# C8 K) E' z, a
/*$ |7 [2 [. ]3 @4 a+ ?4 w
*  ======== Miscellaneous Configuration ========
6 Z) Q, j; V# U/ S6 @# \3 ^ */
; ^  \. c7 A! E9 m# n8 K% r2 K
0 ^  K5 |# J! J8 ]1 k2 |' N/* set default diags mask */( y% g4 f4 Q; n: \6 F2 L
var Diags = xdc.useModule('xdc.runtime.Diags');; i: S7 E* G% @$ C, x- ?* L
var Defaults = xdc.useModule('xdc.runtime.Defaults');* o; N+ Z, X  x

# S$ K  Z" u" KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, C5 y+ w' n4 x5 v  RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 P4 ]. R) f6 h, Y& l2 j' B# i$ QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 r$ i# S! d/ z! \; e, yDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! S" p7 ^& \: C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" _* q2 R9 E+ m% O" b3 G/ n$ G: `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 U1 G& }0 K$ D& a" DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 s0 p+ S, \! a5 y5 ~6 ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 B' F5 r/ i0 t  Q  h( D' T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 T- |  M% S6 _& C! |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  y( w( C  `; L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* I/ I" _9 x6 Z5 C9 P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' Y3 h- Q/ ?% f1 {! I6 u
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ @" s# L7 j0 @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 ?7 `1 R9 T* i1 e, y8 t0 Y9 Z; x. x8 f+ r$ W, P, p( I
/* override diags mask for selected modules */0 S$ F+ f' d" h2 S4 r' k$ Y
xdc.useModule('xdc.runtime.Main');
: R/ e3 ~* c. [# q4 QDiags.setMaskMeta(
0 m/ ^, J" H$ C1 q, B" Q4 _' f/ A! E; u    "xdc.runtime.Main",
# U, ~* _' T. U% r2 b    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 y. M; w5 m' m# }% E' ^: G    Diags.RUNTIME_ON5 o8 Q8 E3 V2 C+ ^
);
' P- ?$ F; E' J/ Q: }' y9 v
9 O9 o, _& N) h  v5 G, Cvar Registry = xdc.useModule('xdc.runtime.Registry');! m5 J% M0 k9 f2 `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( ?! w9 I5 k5 z. d2 I1 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& l# G, ?& o, B+ r2 k' xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) l5 p; @6 }1 @3 lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 V% Q* ^$ t2 C' N7 c: g8 R
# X1 t' o+ ^9 e$ V+ O% {$ M7 e
/* create a logger instance */7 t8 Q: {' H" [' Q# [* _3 C- @$ L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ Y! A2 s" d8 H' d. |var loggerBufP = new LoggerBuf.Params();7 f/ {% [7 @0 m( r$ y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: @: P# C% T) l' k. dloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 O2 P- S$ V/ M
; ]9 t, ]: w5 m8 N1 U: Yvar appLogger = LoggerBuf.create(loggerBufP);
& r0 R7 l0 h$ Z7 |4 IappLogger.instance.name = "AppLog_Core1";: H3 x* w1 {4 H( {; M+ Y( f+ g
Defaults.common$.logger = appLogger;
# f6 H+ c! ~' x# }5 I% sMemory.defaultHeapSize = 0x8192;    " B& c$ \5 g3 V  R
Idle.idleFxns[0] = "&LEDStatus";
- u% B+ Q7 p3 g8 XCache.initSize.l2Size = Cache.L2Size_32K;
2 V0 h; }- \7 [! t3 ]% \
, @" m- O: L- x9 ?2 a
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 04:53 , Processed in 0.041839 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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