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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. f7 U/ `* i3 Y# Q
3 i3 _$ \+ s& p7 m! f! f, z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 R( O. Y4 R. G8 L: T
/ n' l8 x2 l4 s: {& X
其他程序段。。。。。
" @/ E8 D6 {* \9 |! \9 X% N
( R3 T% ~' S! K/ G+ m, R   free(x_d);
% x# h' j/ }5 P$ a8 a/ R) U
7 j4 p% G/ z5 c4 e3 s3 r: j9 f使用DSP侧单独调试功能,验证动态申请没有问题,
1 a$ ~! G" n! r) D; j$ M% E3 r" k7 H6 B+ `& S. j$ G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% j. ?& z/ n5 B. X, ^

+ ?6 y) H- \' \% `# t$ ^# [8 L- n! M* L) @& F

7 N5 L& w) R' v; ^! T/ V8 l
3 ]1 s# C7 c7 U: c1 s4 k9 r# {, v" [2 i& ^7 V; |9 R3 G* Q- k
* J+ k  Z" A, c' A7 s9 w: n. u

( w5 D6 k0 f6 V. k* K6 T$ d9 h+ }' [6 q2 b* d- h" I# l6 b

1 K7 m9 j) K( e) H( I$ l' Z) p4 x' t4 B- ~- K1 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 \, h9 V' [# `: m( Z( x- G5 ~2 h1 Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 u  J2 O1 W* h, c1 Z, S  N(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 W* H2 p2 s' ~  \6 t$ g
/ f" Z: M6 {% [6 Q
是不是需要在DSP.CFG中进行配置$ U) @; U0 g5 w
我现在的配置为
) S0 T# [9 v% C4 s; q  h/ e# ~  Q( r2 ~  C. l9 x& r
/*( v' h) |. B+ o4 B% d& M
*  ======== Operating System Configuration ========
+ M4 G) e1 Y/ d8 R& Y$ d9 X */! B0 H$ g5 W2 Y

  x+ h1 ?6 w% z: Z* I4 ?/* no rts heap *// C" K$ J0 f0 W5 u# r0 y
Program.heap = 0;
, ~# v9 f8 W! z! pProgram.argSize = 100;  /* minimum size */
- e* v6 o% ~  K3 Z$ gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ h; {- \9 ~: P
) S! n- G1 A$ I$ Z: Q/* create a default heap */# K! F4 @2 r! F: l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. o+ A$ t6 h3 ~$ J& B" ivar heapMemParams = new HeapMem.Params();
9 p4 G# e! c* K( s) j( y8 _: zheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) @  }0 @! \( |  m4 k# ]) J9 C1 R; l. k; [% O+ W
var Memory = xdc.useModule('xdc.runtime.Memory');
5 c6 ^, p- Q0 }9 U3 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  y8 C6 \8 h: p; z
" L+ R: V5 U1 i/ _, a
/* configure System module */- O$ R; W# Q' O& {  m
var SysMin = xdc.useModule('xdc.runtime.SysMin');# l# a9 X2 Q( O4 j7 p. ^& j2 ?" q$ D
SysMin.bufSize = 0x1000;  _- G. N+ i5 W# v4 L8 [
SysMin.flushAtExit = false;
8 q( ?, q0 j6 V; ~* @) P8 a, z, F6 ]9 V2 F! N! q. o; ]; j& n8 I  w
var System = xdc.useModule('xdc.runtime.System');, X1 v- V/ n& x, n
System.SupportProxy = SysMin;6 |3 t8 G& `5 |$ G) D4 x8 a; v5 h) W" _

+ O; Q- P  ^6 V5 D& W/* configure SysBios to use the lower half of Timer 1 */, |; `4 l' u5 ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# P  X) p, Q1 r9 uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( |: [7 z& H6 z; \9 y$ U9 P" L1 n6 D
Timer.timerSettings[1].master = true;: S8 j2 P' q+ t- X6 E& `6 H
Timer.defaultHalf = Timer.Half_LOWER;8 t8 o2 f2 K$ Q! l7 V8 J  R& N; T
Clock.timerId = 1;& G$ Z, _% v- a- C4 z5 U

1 K, h/ E% ]1 J7 }7 W! {
, Z- y' f# v1 Z$ A9 J  Q6 |/*3 P- w8 g! Q# Z& ^
*  ======== Miscellaneous Configuration ========
' W7 {8 c8 q! m' ^) G9 W! h */+ F. E- |4 V2 K+ {

8 K/ A2 Y6 r& H, A& |/* set default diags mask */
- A# p+ x! X& {$ a6 w! a) Yvar Diags = xdc.useModule('xdc.runtime.Diags');6 _8 T( B+ u( ~5 i6 E$ c3 m5 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ r* d. J0 g& }1 P
8 s5 {8 q4 A) ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ D: e6 D& T9 V1 }$ a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 ?9 O6 [. R5 J' l- xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 Q" M1 w' S5 A! x* o6 F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# `2 a) `4 c# C- k$ M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; b  V4 v1 j+ c( D4 u1 a# b4 G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- R5 S- i( ~. u- c5 ]& }$ [# ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: P0 s! U! ~; Y5 wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, R9 M5 ~; I/ ?6 x3 h" zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 a& h% m# S2 F, r1 }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 [/ ?( g; x& L* p" ^5 Z* T6 aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ X, O( c9 u* v; UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( @9 F4 P; e9 e7 SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 y5 c# {4 L* W, y1 b, l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% j* n& z8 w1 X  L  U0 N  I/ H
! A. e0 F+ W: n; U0 q) D5 V6 s! V
/* override diags mask for selected modules */
! N$ v* [; i: r8 ixdc.useModule('xdc.runtime.Main');3 H  z4 _  h  G- o$ ]
Diags.setMaskMeta(
3 [* A& z7 X0 [    "xdc.runtime.Main",
& j# h- Y/ |) S5 o9 {3 x) m* a    Diags.ENTRY | Diags.EXIT | Diags.INFO," ?8 A% B! j" m* k) Q: ]2 S6 I
    Diags.RUNTIME_ON
) \6 P) \8 H0 ~9 B  J);$ _: K0 r2 ]2 a
# R% t0 V, G% [. q* X) p
var Registry = xdc.useModule('xdc.runtime.Registry');
! n* ~$ H$ |" w0 cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! }6 ~- }9 V( T: D! v1 H1 n0 x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( d9 B+ m& R. d3 ~4 ~" b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% u9 y) F) m  U8 _* |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 K# C) r" \# L- j6 y0 ?& o% l, O, _& u0 Q/ e
/* create a logger instance */
0 [/ d; K; }( K; a* y) R' H% v  Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  Q- u1 {( E! U2 y& ]
var loggerBufP = new LoggerBuf.Params();0 N& Z& }  Z) @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ w: G! b* W: ]/ SloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ u0 w% r8 H' J3 w1 S' j; v  r

9 g9 l/ D" Y4 d1 Mvar appLogger = LoggerBuf.create(loggerBufP);
* H6 `% }) A4 X* yappLogger.instance.name = "AppLog_Core1";- E0 w5 a% D1 N. V7 L7 f
Defaults.common$.logger = appLogger;/ A( I+ p9 D' w4 q4 W2 @, R
Memory.defaultHeapSize = 0x8192;   
1 J6 U# m0 w7 CIdle.idleFxns[0] = "&LEDStatus";
- ?+ N6 d% q% Z) C/ ?Cache.initSize.l2Size = Cache.L2Size_32K;; U! B8 I# {+ f9 T, @+ O

- q' }; N1 `! q& z4 P- \, ~
回复 支持 反对

使用道具 举报

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 */& f3 {( n! v. D+ r$ B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; O# i4 v6 V$ J& W+ G# }1 bvar heapMemParams = new HeapMem.Params();3 h" c7 x# ?3 B6 F
heapMemParams.size = 0x4000;
% R, ]0 a6 b0 `! F6 U1 w% L  Q. d0 v9 d! Q# J
var Memory = xdc.useModule('xdc.runtime.Memory');& I6 }6 c& u. ^) o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% T8 |5 f  B9 Q1 j

: @9 B! w+ P: {) R  ~1 H我大约calloc  每次共计大小为5K*16bits,
1 K  a8 Y# A8 g% [% \而默认配置才0x4000、需要改大。
( L  L. d- j5 q: c. U  X2 x: A2 S8 n% }# c$ R5 N) |: }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 {7 {; a0 f9 R! ]0 I: r- O' S  q" \
Program.heap = 0;
/ v5 f0 h( Y) j4 ~. zProgram.argSize = 100;  /* minimum size */% v3 V9 K0 a, g6 _8 t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 08:36 , Processed in 0.051763 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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