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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( f0 t# f( y& u: o3 b# ?8 c8 f2 p

9 B1 h/ |# \' h3 U1 F/ }    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* c; Y5 b2 J7 c$ C! i- p3 O

5 w0 F' t% B3 R# }! [2 P8 m7 j8 \6 E其他程序段。。。。。
8 D0 F. _( Y0 X% @
; \+ Y. k6 ?, c" K$ ~- t* ]   free(x_d);
: a: r* Z% f% _1 S, |# T  [( E8 {6 I# l1 l
使用DSP侧单独调试功能,验证动态申请没有问题,6 p% c9 q- a% e7 a: F

2 Y2 M* P' f  o- @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- i9 `' V2 N% [# `

; `) f! O9 m8 M; t! {
8 F* ~3 x; R7 y. |
1 U7 U* ~2 D8 f) M5 }3 `. G& q; f" g; A% \( {! r8 b1 @6 z
* m2 n7 v7 k, c- ]) [) c; f
1 `" N0 S+ b1 b' S4 t- f, `! d, e
2 e) \, B9 T0 l3 O1 S* x

* C) `/ M' p# c
! E: s. k- v2 n% p0 ^+ m' `! S4 O4 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! P" \- u& M# P8 c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( n! f1 I3 M, L; e8 @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( f% K, @: L5 e
4 t' B+ K3 L' _. X1 F9 _" l9 v
是不是需要在DSP.CFG中进行配置
! S1 h8 c* q' c) r* ^6 {8 A我现在的配置为
7 x1 P. N0 V4 g6 V% H
8 m% {2 \8 w: ?6 q: \# R+ m/*4 w5 Q% p5 ~) n; U, I/ k% }
*  ======== Operating System Configuration ========8 g0 _0 N. H% {9 y2 Y: X! a
*/2 Y- J$ X* [; X7 s" ~3 e
. Y& D' M, Y+ r9 m% b4 X
/* no rts heap */& p7 ]5 y' d* ]8 x2 O
Program.heap = 0;
& |+ D+ k$ X3 V. A: m* Y; y' {9 |Program.argSize = 100;  /* minimum size */- s# ]4 ~) c0 C  J; R. d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, r/ S" I  U& m4 s* R7 ~1 d% L* O! w
/* create a default heap */
6 j0 g3 L( w9 X+ Q, u! R2 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 q5 `' d2 a1 H7 u0 Z1 z! ?
var heapMemParams = new HeapMem.Params();$ a5 h1 Y: P2 F6 E6 g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ C; C& i1 ~" g# G* o" [

0 j4 o; S$ R( J: v* e5 N
var Memory = xdc.useModule('xdc.runtime.Memory');* W; `9 Z% ~. X. ~9 I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 y* H4 n* U' w: m) \  E( u1 n
% f8 \5 Q+ w! Q8 ~6 H' c/* configure System module */! K3 ^/ S7 B7 o$ _# p. S: D  D& L
var SysMin = xdc.useModule('xdc.runtime.SysMin');) Q2 c: y( o( W. y
SysMin.bufSize = 0x1000;
# [4 M9 F5 m. K/ x" n2 c$ ]" S+ `SysMin.flushAtExit = false;
  Z' B# D' b4 w: W
6 J* ?3 @) w* F4 k6 Fvar System = xdc.useModule('xdc.runtime.System');
7 Z1 S5 z3 z8 b# lSystem.SupportProxy = SysMin;
$ N) \; D: ?  z6 s1 R$ F. I5 l: Q3 s! X4 k, F
/* configure SysBios to use the lower half of Timer 1 */
; X. M# C, s3 ?, m" Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: o; _5 o0 a' G/ m% W8 ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 Z; C" F0 J4 B# v/ L6 x# kTimer.timerSettings[1].master = true;
& n* i& f1 i! p4 `Timer.defaultHalf = Timer.Half_LOWER;
6 F( f) h) b" L& K2 l- gClock.timerId = 1;7 r0 E; R* W4 @2 ]# D/ k  _& W5 t

. u# |1 B: I7 k7 F. L$ w! j. ~  `  u: p9 x4 O5 q2 O
/*9 q6 h6 q. n# f0 R' X
*  ======== Miscellaneous Configuration ========
; [$ }$ m( R* q */( z/ |' q" z+ m: S8 h( B

! l" |- F1 A3 W7 Y' Q# {/* set default diags mask */( o0 I! l4 y) s
var Diags = xdc.useModule('xdc.runtime.Diags');- R5 K, l. t8 v1 ~0 I7 V( y8 D" S
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; V  n9 S: D1 T! ^: U. `
6 A- _' u% X' m# G/ ]$ H6 FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ w- `5 t! H  J: u5 U: v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- c% D: o2 d7 D" N  nDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- ]7 J5 B2 ~5 o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ z' x( W, o: @7 b' JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 U/ R6 b4 m( W7 t% YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 h7 P" Y; b3 c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ t/ |) f$ ~: FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% u3 h+ n- ^% `/ Z4 m4 pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! K) c- P$ O" JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ S- S% |+ S* f7 e# XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 t( G5 ?; J8 z+ O* r. e; ~% YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ X, ~- j3 u/ Y! k+ o1 o0 eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. L  q  t- N1 ?' f- e( u# }% SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; l! l/ U; Z% @, l( \
) {. R* z: [# G7 Y
/* override diags mask for selected modules */
0 l3 b  Y3 s6 T4 J6 g& N6 x5 |xdc.useModule('xdc.runtime.Main');4 N6 w, ^( Z* O' o. w
Diags.setMaskMeta(7 L3 o9 G1 U' F0 n( t( I
    "xdc.runtime.Main",4 d8 p' l# u. @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 D! M7 b2 h% K9 X* }    Diags.RUNTIME_ON( c6 [. T% Y9 r, F" p4 h
);1 K7 m- `5 S) o. G
. S& ?. ]: t' A7 I9 V4 U
var Registry = xdc.useModule('xdc.runtime.Registry');' l8 l) V! b8 r1 \3 I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# z7 k+ ]5 s, u- IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; f3 d' F' X- A% A* z) f' ^% ^  Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' @1 O5 x( t, G$ p; Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# u1 d# z) L% e3 I

$ U/ W# C$ ?) o: ^& z' \  S/* create a logger instance */
7 e0 c8 ^! J7 R. jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- k1 r2 `' X2 r$ Y! P5 a9 xvar loggerBufP = new LoggerBuf.Params();
. p* X3 L- e1 ]( ~: P# l/ u1 y' N  yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) ?; f2 W$ K3 _$ ?# q, O8 jloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 s+ {3 G" [; g2 ^; A: \

8 }1 O" c- x2 d! `0 h: A3 Ovar appLogger = LoggerBuf.create(loggerBufP);
6 `  }& f* W; `appLogger.instance.name = "AppLog_Core1";" e2 W3 Z# W7 F3 j
Defaults.common$.logger = appLogger;
% E4 l, v) g1 N& b+ I* }/ z4 ]# zMemory.defaultHeapSize = 0x8192;    3 j- l# y4 G. m
Idle.idleFxns[0] = "&LEDStatus";( K+ x2 ~' u; C* f
Cache.initSize.l2Size = Cache.L2Size_32K;- o& f! d3 n9 \4 `$ l) Z0 ^
0 H$ z5 r, m# T6 O( h5 H5 f4 v  `9 Q1 q! j
回复 支持 反对

使用道具 举报

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 */0 k" B+ F. y1 _. W, F: V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" \' a1 m& p! i7 J% ]* e
var heapMemParams = new HeapMem.Params();
' l! p8 E7 j/ r2 kheapMemParams.size = 0x4000;
' z9 M7 r7 K! C3 w
2 m7 ~; t( {7 |2 j2 h- Fvar Memory = xdc.useModule('xdc.runtime.Memory');( v/ z* ]' M$ `. _% t% }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: M9 [4 b& ?- b/ G
9 V  u- k, N4 k6 D+ r0 Q
我大约calloc  每次共计大小为5K*16bits,
) Z5 N% ~5 x/ }( j6 [而默认配置才0x4000、需要改大。" j" b4 P4 _& t; U
" D  Z4 ^% c6 W; Y2 ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* O! {8 }5 K  f6 y# ~3 mProgram.heap = 0;: ~9 x# k9 S7 Z1 r# U7 H
Program.argSize = 100;  /* minimum size */) Z+ m  @% d& m3 q  A# B
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-17 15:22 , Processed in 0.041220 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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