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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! d; `2 w# \( K* X
1 V3 A. K6 p' [. A9 V% J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( O6 E* J7 p; r$ n  g
# z- o. `: O- _6 W: ~  o! q7 B
其他程序段。。。。。: k9 O2 Y: q8 u

; l* M' J9 d: G, `   free(x_d);
4 t* I5 U& s, x+ B# z
! G& I6 b+ a4 @5 D4 F) D使用DSP侧单独调试功能,验证动态申请没有问题,
0 N! H5 L* S/ e7 a- v: e" q
0 s6 i' \5 I. e& T& @4 V: g6 \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; x$ t; A# f- n! m. {/ ?

: }1 l7 N0 c$ U4 I) n
0 f+ b! S" Y4 [- `1 i  o
$ N* I1 W' z5 d0 p$ m% m% B- k: o2 e, J: \+ r7 X. X! P

2 \: k9 s7 ^, O: \2 e. D1 h5 D; s- d4 G
; S! J( `3 W/ W$ h+ w
  l! B% n8 u' G$ }+ x
# C( `; o/ @$ |0 V7 o. C: G9 T
% z( \0 U. n5 [; ~
分享到:  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 */3 P: y5 F8 ]( p- ^, X- ~! d
Program.heap = 0;1 E) U& _5 N# I8 y" i1 U
Program.argSize = 100;  /* minimum size */% i" H3 J5 V! L" \; M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */% t! v0 x* A7 F1 ?; `) h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* \% c' a' `  o3 B7 P+ [- s& |' a
var heapMemParams = new HeapMem.Params();4 J8 i( W+ j  T! E9 u
heapMemParams.size = 0x4000;/ R1 q9 P7 O- ]

3 m5 B- c3 |) D! Qvar Memory = xdc.useModule('xdc.runtime.Memory');9 C* t9 b* q; B  h) L* {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, t0 q$ \4 M7 ^" T, B

; |5 X1 \' y5 N$ R9 ^我大约calloc  每次共计大小为5K*16bits,
$ A. r8 I. Z* k5 A$ d9 S& ]而默认配置才0x4000、需要改大。. W" {! r2 \& _# r. J
' g. P% e9 D3 p- G
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
+ t# N/ l" q5 K我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 t7 \- G  V$ @9 f1 @/ T8 K$ M7 r6 w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: K3 T/ z% p' y- Q( c0 J8 B

0 p# Y: K# j- [9 G- l# k8 p0 k是不是需要在DSP.CFG中进行配置
! l( l" E* `5 z' N7 R+ G$ K) ?" o8 i7 z我现在的配置为
2 k6 C: q/ X" J7 ^8 D$ n$ V# Y  F+ y1 J( J
/*
! b/ I: L  t# [# d4 x# @ *  ======== Operating System Configuration ========
& M8 x/ I# R" a */
: b' J' a+ B7 S: g6 k( c; [, N2 k# A7 R' l; w6 j
/* no rts heap */' R+ i% R# O/ `$ O; l' o- o7 u8 Q
Program.heap = 0;
; o* F" K- y% ^4 S; X" QProgram.argSize = 100;  /* minimum size */
) w( `* ^2 U; ^2 E" w! jProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ Q) W7 W: v# x; @4 J% c& _3 B/ `8 Q5 z- f% @% @
/* create a default heap */4 N) w5 J  ~1 O' F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' L8 V0 X* J2 I) qvar heapMemParams = new HeapMem.Params();3 ]/ W1 a3 L& @# x% ^3 w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 S) I) C; H* G/ q, K. x5 n. K, A' h% ^4 X8 M
var Memory = xdc.useModule('xdc.runtime.Memory');
; S! G, H8 N( w& `0 G) jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 P# q- D6 J. b$ R
2 |  M9 ?! {. U! s6 ?- M$ f
/* configure System module */
  v; O% q' H9 N# I2 G/ A; fvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 n$ ^+ I$ K/ k8 L- I% ?
SysMin.bufSize = 0x1000;
( C* @! H, J+ F1 Y/ ?4 pSysMin.flushAtExit = false;5 i; w9 X1 L0 I

& V4 p# \0 E) i( m7 ?0 [var System = xdc.useModule('xdc.runtime.System');' w: G& t( \, l$ e8 `5 o
System.SupportProxy = SysMin;
4 [" K+ _0 X! H! E/ p
5 \+ h) M% M7 B6 Z3 ^+ U  A/* configure SysBios to use the lower half of Timer 1 */
, z( d8 Y9 m2 m( K, f& a- dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' Z6 N1 t9 V& H9 O
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 u) i) r* b% z, g; @  J
Timer.timerSettings[1].master = true;; H, a  M  k* X- p' w1 P
Timer.defaultHalf = Timer.Half_LOWER;& {0 x' T9 o1 G! T* p$ i; y$ \8 I
Clock.timerId = 1;
7 s! H4 s% J4 h3 L6 S# A
4 L, P2 o% e% a* q7 l2 F( L8 f& F  V0 j* G* t% p' b: w
/*
; {7 U: t4 d" g0 H  [2 v) A *  ======== Miscellaneous Configuration ========
/ A2 Q6 p) R$ [' _" z5 \9 S5 B  _2 s! w */1 s7 d! Q' L' c8 j' ?

  C. q6 \+ ?% g1 x/* set default diags mask */) _& U* z8 Z+ k1 Y3 H9 g. p
var Diags = xdc.useModule('xdc.runtime.Diags');( K5 U2 {. W# V* y9 m4 y% T2 i- H
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 F* L6 R( g: S& b0 ~. u! R
2 g% ]# s* v# O" i3 s! b( K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, ~' r& U7 f. K! e5 _2 `0 [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 p4 A. T& i9 aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( |* Q& j% ^7 N, F) Z3 L. L! T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ E6 B; [+ V( I5 Y. I$ d* ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# g# }; g& F' R* N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: k) b+ T1 t3 b; ]' n8 w! \7 T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- p, c/ Z0 o, n4 E6 c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: {  e4 A) o/ a, d+ T4 _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. f0 y/ H9 V* Q) a% X( Q5 S5 L; R; A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* v# _. q- c- _, VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, S' [# L2 S9 F$ s- k% v, V! e) G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 O! \' r" g: Z0 u* d! _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' f: Z$ K! M/ C# Z) YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 Z+ u; ]- t. q/ K9 z  v! F, g

. G1 c) H- \; s" n- x7 }/ Z/* override diags mask for selected modules */' e4 ^; }; h* ?4 e" f2 D$ s
xdc.useModule('xdc.runtime.Main');4 a6 h/ }& W7 _- x, S. r
Diags.setMaskMeta(
$ Y( d, `8 {2 U1 ~    "xdc.runtime.Main",
/ o( h0 a- {. t- ?. J6 ?    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 Z9 E! x+ }: q9 K+ }    Diags.RUNTIME_ON2 H' s0 F7 d' s( o4 W! K: M
);, Z  W3 J4 [2 O

& W- m/ e) S% V6 |2 q7 Evar Registry = xdc.useModule('xdc.runtime.Registry');
& ]- Q5 r. o( ]; g7 L9 F! _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 l( m, L  a5 R$ J) O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 W6 @% |; h/ d4 t5 Z; DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 [$ e2 ]# Z8 z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; h$ f0 R2 E7 v8 |. H3 P
8 [/ b  f" g7 T9 J/* create a logger instance */
1 G" |8 ~# d6 A2 _: E5 vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# A, T5 N: }4 _- V& l1 m: g" Uvar loggerBufP = new LoggerBuf.Params();
; L7 X4 G, e9 G  t& ~; I: {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 ?& T% `5 l. t7 p6 GloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ i6 m% I; M/ l3 T
; i, `* D' O1 w* |" V1 Q* R
var appLogger = LoggerBuf.create(loggerBufP);
$ b$ g* t. h5 y. C$ a. HappLogger.instance.name = "AppLog_Core1";
4 a6 S. B4 e! M; Y+ e, p' g# tDefaults.common$.logger = appLogger;" |3 m3 @6 _6 M
Memory.defaultHeapSize = 0x8192;    " H. m# Z' n4 n0 A8 _% a. ?+ }0 z
Idle.idleFxns[0] = "&LEDStatus";
2 m! r" K4 N  e8 @5 N$ j/ R4 V1 OCache.initSize.l2Size = Cache.L2Size_32K;, R3 Q9 @# p1 D1 W
3 J3 A' R& Q# q7 ]9 i
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 03:29 , Processed in 0.044857 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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