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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 Q* b# i1 z; J" K) Q9 R
, r0 Y0 U) Y& ^, c9 `    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 l- Y( w" A5 Y
  P# n& ?. h, K- |. n! l其他程序段。。。。。
4 D8 d0 k  e6 |+ A% c) J 7 H0 S* c9 A# {3 o* b/ U
   free(x_d);4 `0 S7 T, T; B! P7 G* ~

3 O% I9 ?2 B3 U( e! z7 e使用DSP侧单独调试功能,验证动态申请没有问题,' {# {6 J" R/ _$ |; B1 E
% @3 x& x% J7 Y9 z& u  N# k- W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% P8 @% w/ ~& j( G

" n* Y$ i3 z4 a4 _. M: p
  b; ?6 _8 r$ D1 y1 S7 _% X! ~- a* v7 m2 p: N! @4 W
6 L# i3 O# q& g$ P

! A# t/ S5 I: [+ r$ t6 X3 M! _& o' Q+ m- i$ U

% d6 m$ c* S( Q  A+ O+ H! s' N) [5 O% z7 R# W) s2 _3 }( G

$ E( e; }" l" D* N/ b) ?* u
+ u$ Z9 v  L7 j. M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% n& Q9 m* M; p! [6 V# {& N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 c! o4 R- V- J- ~
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 C9 J& D# N; t, v. |$ m  G: D0 ?6 |
5 S+ N: ^& l! D; ~# j: P& h
是不是需要在DSP.CFG中进行配置
1 Q' y& k3 N/ z我现在的配置为" o7 c! ~7 T) d" v3 O

1 |5 T( C+ |  T$ _. [$ S2 x0 X9 L/*
+ F: n3 h, Y  C- s: U *  ======== Operating System Configuration ========% p( J, s: Q. p) W6 L9 V
*/( s# n1 ~" Q/ o& o: T- O
" r7 o7 j  Q% h  ]' C
/* no rts heap */0 V9 J, G! Z* ^0 [) T4 r
Program.heap = 0;$ H+ W5 F, z" h2 I+ V
Program.argSize = 100;  /* minimum size */# c* u! @  I' A! i+ g/ l& m) \8 u( z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# G9 M0 H% M% {; g% W7 M( b- J

2 F% P/ N1 G7 j6 S/* create a default heap */5 E, g5 g. L2 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; D/ G! g, X4 p% Q5 `; n' Fvar heapMemParams = new HeapMem.Params();; @" p3 @' _/ {5 W/ H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) u8 v/ G) y2 ?3 B* w- F
; q+ W+ G) Z' K4 p* \- w3 [
var Memory = xdc.useModule('xdc.runtime.Memory');8 v* w6 p+ A' j# X% W- f4 n! y5 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& O- N4 I( j# M2 N6 X5 B5 r" s4 Q. G! ^
7 |: F6 L5 m7 e# O) q/* configure System module */6 d4 \7 n3 @; o6 N2 c' F: T
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 c/ \. i  y3 {3 C5 }5 m9 ], }; ESysMin.bufSize = 0x1000;
& c' E' M' Q. l# GSysMin.flushAtExit = false;) c3 G7 G8 Q4 W5 E3 m! m
3 F9 m2 q) q( |9 X- Y& I. s, N/ D
var System = xdc.useModule('xdc.runtime.System');
( _: R4 P+ F5 T0 s4 Z2 @System.SupportProxy = SysMin;8 Q6 P$ l" ?. Z) [. Q! }

( E( ^1 \! ~3 y9 g7 |/* configure SysBios to use the lower half of Timer 1 */
0 r8 `3 n% Z8 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 p* B$ B4 G: M9 [) a  Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
; r, O. N8 z0 R* M- U- YTimer.timerSettings[1].master = true;
1 {' T7 {5 c, c  y6 PTimer.defaultHalf = Timer.Half_LOWER;
5 i( U' ]$ H! N5 [# s3 J9 IClock.timerId = 1;  s. P! y9 ^5 Z0 V1 z

* P% a& g, ]3 v4 Y( R4 U3 ?1 B$ c- b) S8 B2 B, E  i, [$ n
/*( P5 \1 R1 c5 d! [% U
*  ======== Miscellaneous Configuration ========
3 C( F' A2 Q% Q. V3 N. I */
" E# \0 s+ {. d" F' S8 @; H9 D3 `6 f
/* set default diags mask */& Q0 p9 l# V3 G
var Diags = xdc.useModule('xdc.runtime.Diags');
) k! |. a4 ], d4 |# Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 y% m% k5 c8 ?/ C, j  U$ s  ~$ q- T9 P$ `" ]3 ?# [1 G% b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" y- R4 h2 [6 J4 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 H4 r) \- V  s1 ?6 n7 o& Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ E( L, F* X" R$ ~7 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; l4 r0 U+ Q. F! Y+ C( E  B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; h0 l: H' i5 D- ?* YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 ^3 Y! G' |, _: p8 W, M1 R$ eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 T3 k0 `" `  g) i7 CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& ~8 O- m' p' _1 U; @# R1 ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, o& M4 n% Z1 G4 r$ P/ c9 ^" S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  |# E3 }: C" M; v0 I1 g/ M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 _3 m$ `+ l/ n# j  o; A3 UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ F0 O$ }' W6 k# ~6 j) k5 aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 H5 ~. {4 I) H3 h! H- s) T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 m" Y2 W; T8 Y( H# T0 {" w6 t
/ _5 u' q9 ]& e2 ^" v9 ?: }& Z/* override diags mask for selected modules */& X& l' J' x( d( L
xdc.useModule('xdc.runtime.Main');
$ W: R6 i" D9 t3 Z; V& Z! [Diags.setMaskMeta(
. A+ J; e8 ?# d) z, ^$ X7 ]  a    "xdc.runtime.Main",$ W3 R/ @, y4 @5 a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; U9 ]/ W& H4 ~5 S3 n
    Diags.RUNTIME_ON- D/ T% l) `! t5 I- ~$ a; e$ Y
);
  v+ l& {5 \, ?7 B7 C1 R, x1 W* Y% l3 r
var Registry = xdc.useModule('xdc.runtime.Registry');7 m( w+ A" m. w1 Q* q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 P$ c5 X0 u1 J6 n. a3 H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: X6 P" V& c3 d" lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ K' E3 R8 ^- E: E+ U  rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;; r6 N2 z' q& y- U$ c  v- e

' ?& n" ~! u; E( j9 K7 F9 a/* create a logger instance */* H- v; @0 x0 [% x% x& R+ Z) A% }6 B
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 t! ], P5 q% }* h3 v; jvar loggerBufP = new LoggerBuf.Params();  ~! Q1 `9 ]0 g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 v8 j  A$ Q4 w" w: y" s9 IloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 L) t7 B; j; B6 M4 M5 W1 N( H

6 Y3 e$ r$ p4 v0 U# E# f3 \+ [2 U3 jvar appLogger = LoggerBuf.create(loggerBufP);
0 i! b7 n' R8 L  V+ L& jappLogger.instance.name = "AppLog_Core1";8 ]4 S7 t2 ^9 ^' H5 I
Defaults.common$.logger = appLogger;9 ]! c- t( ]3 C5 e( n8 C, X
Memory.defaultHeapSize = 0x8192;    / H! O3 Y9 L7 c' l
Idle.idleFxns[0] = "&LEDStatus";, c9 ~  n) u0 |' }; \
Cache.initSize.l2Size = Cache.L2Size_32K;
( X" x5 a; u3 g: S" b: M* Z; V5 h8 T: h7 g. F! l2 K
回复 支持 反对

使用道具 举报

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 */
- I- r& c) ]3 Y: [4 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) K4 z( {) z: I) N! ~, E1 ?
var heapMemParams = new HeapMem.Params();+ \* y" k1 E7 Z; h6 a
heapMemParams.size = 0x4000;+ D9 o5 E0 c( r. L7 J/ x. X0 ^+ o' q* Z

0 M7 G4 D* a' ?' T# u7 k9 Dvar Memory = xdc.useModule('xdc.runtime.Memory');
2 N+ j9 s3 c- f6 tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 }* z# M0 n3 Z* W: I# J
5 [8 S- _3 ?* t
我大约calloc  每次共计大小为5K*16bits,- M1 B' j& Z2 t% T8 E( o
而默认配置才0x4000、需要改大。1 `2 C# S6 c- [! x7 ?/ X, C* B
+ i$ e9 X: I$ t  M7 p0 e* s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' N' {- O' {) N7 f3 T4 r
Program.heap = 0;3 E/ k5 _) l* L2 k
Program.argSize = 100;  /* minimum size */  U* G# x* s0 j9 l! d* M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-4-4 05:11 , Processed in 0.040260 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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