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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* p( {4 Q6 V; b7 {: T  U5 O
  b6 V4 Z( x7 l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! f+ |# b5 U# u4 Y* I
5 s7 I4 K* b3 M7 J, n# I, a2 Z& T! ]
其他程序段。。。。。
" B5 a5 W+ O9 H4 T4 r
5 Q! }, I2 [4 }7 }   free(x_d);
( z" g0 Y+ i  [7 Z: f1 z8 M3 F) A1 ~/ v
使用DSP侧单独调试功能,验证动态申请没有问题,
+ B0 f$ x; `2 ?& _, J+ M4 s) |! }- q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ s  l% i) B" b5 P, k2 B

. G+ ^% V$ n2 @6 V  r# d/ i: t6 m1 U* ^6 _4 Z6 P+ H% m

1 ]3 p5 \, I9 I6 ]3 M" Z  X0 s5 J% b2 @" I

; S9 b  t$ X, N  N1 o- n- W; k$ x2 ?
: A# k; a- G7 i' H1 Y' U+ u
7 \7 i, \+ h7 q
% J4 D) o( g2 Z# k

# }: D1 _+ F7 `# o( L6 E: e* X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 `% u' Z% U( H* j9 O$ d6 a: U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! u6 H; C) |) _7 w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 i4 b3 ]6 b* g: m% ^5 g+ K

! v- q% G- P! X& R是不是需要在DSP.CFG中进行配置, d. P9 ]2 Z* G2 a5 D
我现在的配置为
0 q/ n. k3 s4 H  W$ a
5 C! |% u" J( p3 j* H; D/ }+ ?/*( j0 J( M! `( H6 n# B6 m3 u& {
*  ======== Operating System Configuration ========
5 z6 Y! g, x1 y) E/ L! ~: h3 i */& j8 F2 I' r& a" O
) J& H3 U5 r/ y8 s8 G
/* no rts heap */
8 P" F: l* D; SProgram.heap = 0;
" ?" f# X' L/ l3 FProgram.argSize = 100;  /* minimum size */
' L/ i7 O2 _# d8 o) sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* a: w! L* N  e# l! a
( V/ @! b% R+ C/ Z7 U; i2 m
/* create a default heap */
) l* W3 a7 _! d, |. O( c, ^# Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 t" X: V5 x4 n, q. ]- B; ~+ ]
var heapMemParams = new HeapMem.Params();! b# o: D  U2 ^; W- ?- O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( `, D* C0 H7 h; N4 u% d; H% {- ?/ E
" I4 [; R+ g9 n
var Memory = xdc.useModule('xdc.runtime.Memory');
- M7 T1 p3 x- H( [- C; T6 yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, a6 i2 L8 [7 N( V: P* Z
/ x, O8 q3 V4 r% R! ^+ P. z/* configure System module */
! r4 M# Q0 T3 M" ]7 N7 a% ivar SysMin = xdc.useModule('xdc.runtime.SysMin');" s6 ]9 M0 q2 Y5 H' C$ ?4 Q
SysMin.bufSize = 0x1000;$ f# W, M  W4 q0 A" w
SysMin.flushAtExit = false;( I. v5 y  h3 k. f/ h* R

- _- ]& A6 k1 Wvar System = xdc.useModule('xdc.runtime.System');
8 {9 X: Y4 O4 k" N( `1 ASystem.SupportProxy = SysMin;( K# @5 ^2 a6 H1 c9 ?* r& E

" F, B  M+ i  ?, i: L* `/* configure SysBios to use the lower half of Timer 1 */8 Q+ ?$ E7 [' x9 R* K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 X; d" `" Y/ E7 ~' Y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 S- F, O  w" n" o, f7 q4 v
Timer.timerSettings[1].master = true;/ b$ a4 `1 A0 m0 N+ T2 P
Timer.defaultHalf = Timer.Half_LOWER;* @' d7 f7 y" @; i, e/ z8 b) c
Clock.timerId = 1;7 v! ]; w/ ~5 ~  P3 L6 L
, j% R4 J4 n: }4 p( f! @, i7 p9 @

* k# B# H' g! g) d4 h/*( n, ^9 E$ ~  O4 Y
*  ======== Miscellaneous Configuration ========
$ k+ Q  H3 |9 H+ F */
& r- c  C  M0 L2 I3 U7 f* m
+ z" i) m# O, ~2 d- }: l/* set default diags mask */1 X. h% `' H4 H. l% C7 m( q* S2 p
var Diags = xdc.useModule('xdc.runtime.Diags');0 _! b/ n+ R5 {
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ h1 \* g* m4 t9 \
1 h" _5 X. I) [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 y! V, W! i1 ~# A" {- ]9 [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 v8 k# q6 u6 i6 L3 C9 g5 H. b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* z/ U3 x5 |& D/ DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- Q+ O. x) T' y* z4 f/ @0 YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' I+ l( p" n9 h; pDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- v0 N+ M6 l: A6 Z: T9 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 `+ |. g; D& q& s: P1 W; V9 a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& b- i1 a: J5 V" Y" E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& n& j! U9 b6 L" K1 j7 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& D4 }+ W( d9 O: `3 `8 w+ N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& k# K. n- i. {# ]( M+ sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 W6 W; D# W/ y1 Q' ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; F) g' r: D* aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 {- t9 r- e" c  o5 y6 J. h2 K

7 I5 [0 L+ K% _7 n3 n9 M/* override diags mask for selected modules */
& j7 Q" S( a$ x7 T7 Ixdc.useModule('xdc.runtime.Main');
6 h6 c9 L6 _" D5 R' N5 O! `) BDiags.setMaskMeta(8 u+ X7 N" b: p
    "xdc.runtime.Main",
. p1 G: a3 {, Q: O. s+ U# E; |) v    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. B0 e8 ^8 x7 {6 q: h( l    Diags.RUNTIME_ON, k# E! s8 D4 }; U: i
);
% L4 e! A: z4 \) `% {; e0 u/ ?; o; \% s; n2 z
var Registry = xdc.useModule('xdc.runtime.Registry');
# q/ \7 Y; T3 L/ W; u( XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ `! _2 S& ^7 W2 X, L' H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 o% s- J& }* I* [  fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 {, T) X( h/ y7 n5 k
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 M8 s  {6 f& l! ^
' u: @* i  ^8 o1 |3 [2 X
/* create a logger instance */5 N1 e; L; b# O( I" f9 k0 A4 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# k6 P: ?% v9 k5 Q
var loggerBufP = new LoggerBuf.Params();
! W! J$ M/ s* f7 l0 l7 A8 ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 Y3 v* C4 u* G5 K( gloggerBufP.bufType = LoggerBuf.BufType_FIXED;
* o3 I( q. |) S( U* N$ L  u7 X( E6 [0 d  z# w7 a
var appLogger = LoggerBuf.create(loggerBufP);
8 e* [2 D; W4 W) ~4 uappLogger.instance.name = "AppLog_Core1";3 r5 z' N* L$ S7 P6 E( S3 _9 ]
Defaults.common$.logger = appLogger;
. a: {# e6 N" ]# ^; a" D+ oMemory.defaultHeapSize = 0x8192;    / T) y" t0 m3 E2 L, Z* {
Idle.idleFxns[0] = "&LEDStatus";! _4 j4 R7 L3 ]& I: M" Y0 S% G
Cache.initSize.l2Size = Cache.L2Size_32K;
3 R+ Q! ^5 A) R1 s/ d' f
, q' j; c' u' W+ \  G6 g1 M
回复 支持 反对

使用道具 举报

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 */4 O; j8 _: w& g, i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ Z9 g1 v8 Q6 ~, N2 _/ avar heapMemParams = new HeapMem.Params();2 k: v& ?% @# |6 h- ?
heapMemParams.size = 0x4000;
9 P# N& q' l9 p- Z3 e" @3 R
) l; z/ L5 g0 _( o% g2 t8 Cvar Memory = xdc.useModule('xdc.runtime.Memory');
2 h7 l0 [) \5 h% X7 n* V! m" ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' w7 P. n. _0 F# {$ ~9 r  Z3 ]: n( r8 {& z7 k
我大约calloc  每次共计大小为5K*16bits,, a. Z0 U" d) i
而默认配置才0x4000、需要改大。5 X. Q! p, [: ?; E, e' Y
. }, d- u8 {. z9 ~  w+ L3 b# {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 M+ C9 ^/ P0 X0 n7 UProgram.heap = 0;
# z( c/ C: v! CProgram.argSize = 100;  /* minimum size */9 c; t) ^1 d; a& B8 F9 N, R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 03:20 , Processed in 0.044785 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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