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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 I  `. i% t* {2 X
  t- X6 U  S# ^& F' k9 S: \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 f0 o8 _9 L% c, U; n1 _9 p7 ^# Z, U' a- W7 _4 n
其他程序段。。。。。5 ?9 B  ~1 e5 X7 S' [
4 j' g* P+ U7 f3 i6 U
   free(x_d);/ B* j' C; O$ V" }

* n$ J% i7 o: r( t' t使用DSP侧单独调试功能,验证动态申请没有问题,
" H, M5 y3 Q# M- @2 C/ I0 ?4 H5 S8 N. I% S3 H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 ?1 `) q4 p# U" X8 J
" }8 J% ~  I4 N7 K3 O1 |( V
1 |0 @- j+ s- G& N9 l; X
# U* C9 @2 P0 T9 ?

) K4 }1 M; R3 [7 h$ k) C4 R7 ?& ]0 X) Z  f6 A% L
( r" {# ]; J0 b$ W3 G
& u" J. J7 t! u, J" O
6 C% N% Q9 P2 H, O: z( t
1 T8 |& r! j4 z! m" S% i
3 I- f6 F7 h' A+ n) H' K3 `
分享到:  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 */
. ^+ K$ P# S9 j- O- LProgram.heap = 0;* l3 v1 c% C9 C: K
Program.argSize = 100;  /* minimum size */
1 _9 o2 P. k0 ]: D8 @2 d! W6 Y- NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 q6 ?1 d! v9 c# F) K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 \) w  K5 P0 w& ~9 x. Kvar heapMemParams = new HeapMem.Params();% _+ D' F$ M  v; o; _0 `  G
heapMemParams.size = 0x4000;
. ^. F/ D% A. I  R, k- H8 t: r% p  y+ _/ j% Y  z  ?
var Memory = xdc.useModule('xdc.runtime.Memory');
; q6 Z' }# u/ U; n7 R) s6 }$ M4 IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 e: X) ]  j( U: O3 h3 j
4 R4 q% G  _& ?
我大约calloc  每次共计大小为5K*16bits,9 w/ l& @( i! @4 N+ {
而默认配置才0x4000、需要改大。
& X( H/ `% t# E. y9 z7 `# g8 m: @3 |6 S7 K) c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 B$ D1 N% O# k3 N. G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* |2 G. J, l  h2 s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  I) w  A) l4 Q" h& R' @

2 X3 O7 x! v% N( T0 Q9 M$ D9 \0 a是不是需要在DSP.CFG中进行配置
) y# P) B( Z8 Y5 \$ y9 b& K7 A5 k6 Y我现在的配置为  Y& R7 ^8 h2 Y2 D, S  g! P

1 {4 @+ J+ l. v2 L. d$ w! n5 ~/*: I5 t0 I/ {4 Z: [
*  ======== Operating System Configuration ========
$ e/ w) I0 E( k* i! r0 G2 k */$ P$ @1 f# E6 D" d5 S

" K, Q0 \1 Z3 r/* no rts heap */
1 ?6 e# i' i- p8 I# SProgram.heap = 0;+ ?1 E% w) E: w6 \$ \. _7 g! Z
Program.argSize = 100;  /* minimum size */
7 i  F! P% F5 v- a. C, ^, z6 mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 T0 R" b6 ?2 G& Y) j) W% b$ Q" f9 g9 R' e1 y+ B
/* create a default heap */+ `* C" P0 g3 d8 ^& ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 e8 h; P6 ^$ F" @
var heapMemParams = new HeapMem.Params();- e, j$ J' _) z7 F( j# i9 G: w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' s' t) s5 D* @  G6 B
  I  X8 ]3 J, y
var Memory = xdc.useModule('xdc.runtime.Memory');: G+ Q6 B4 v# O# W& I+ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ `' J+ _# y; k! b' {: \* ]( G9 j  a; O) e9 j
/* configure System module */& h0 \& {% E- T
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. z8 l2 e5 H( M% u( n. SSysMin.bufSize = 0x1000;
1 p" a: P+ V# l! U4 fSysMin.flushAtExit = false;
7 l- y2 g3 B/ C' C* ]
5 D4 M' t" q' r7 a/ g7 v6 s- Zvar System = xdc.useModule('xdc.runtime.System');" j$ R4 a6 c* }
System.SupportProxy = SysMin;
6 q% c, x0 u" S% c( T5 M7 u* Y# r
/* configure SysBios to use the lower half of Timer 1 */3 p/ {. ?2 T/ i* M9 g  V# U: t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( \6 X/ L4 u0 {- m5 Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% l' H, e  |2 f) n
Timer.timerSettings[1].master = true;
, C  Y3 y$ X1 k0 K" LTimer.defaultHalf = Timer.Half_LOWER;
) F, x' {# x' h0 KClock.timerId = 1;
( _. U/ m+ x$ `, X  e
6 L% y$ S2 N1 d* r' p6 x4 k/ {2 w8 s# C
/*  S8 N( Z& v0 s. e
*  ======== Miscellaneous Configuration ========( ~( w( g# y9 J. w
*/
/ E" }: U( N' f& u! W0 y2 c# S/ e. p3 @/ r" X6 \3 k
/* set default diags mask */
* }6 \- R) o0 o9 j- v$ h: Uvar Diags = xdc.useModule('xdc.runtime.Diags');
3 m/ |) k9 u( P/ g, Z6 W9 {var Defaults = xdc.useModule('xdc.runtime.Defaults');
* t9 ]6 G9 a7 w" i9 S' W. O
. R  I" a  ~2 [1 P) x1 W: e7 |$ dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, J+ h% h/ \/ A# l9 N+ o9 f9 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ q7 l/ @2 `" }2 ]- _) }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 _* F, ?; K5 J6 R* z/ i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ N$ X! b# L  T5 {0 ~  oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 e/ O) [, Z, U2 ~; F# ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 S9 l: V9 Q2 _) C2 E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ V) X( N# Y- Q2 O! K4 z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 W  W1 L. y: S9 k. M# sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ _7 J' O  l6 E* `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* t- ^: n) L( C7 x7 B. qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) w& Z$ K& y2 O* `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ }7 P7 p+ @, |4 t5 RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. L- Y" J! Z# g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 D6 r7 @4 B8 A7 E2 n/ d

1 J$ o- _# J# v- `* R, O/* override diags mask for selected modules */
4 c1 J1 H& t+ Hxdc.useModule('xdc.runtime.Main');1 [  Z& k8 l" j7 q3 R1 q3 l1 r
Diags.setMaskMeta(0 C, f/ f4 e7 ^; z# f! p2 I  ~
    "xdc.runtime.Main",9 {5 `7 o: b, f7 s- u  v1 g( I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% Q/ D/ h& @! m2 r    Diags.RUNTIME_ON/ v) ]. ^3 K9 N* m9 k! F
);4 k* [+ _7 t6 e. k9 B

% o- y: H: m/ s7 A! q7 c) {var Registry = xdc.useModule('xdc.runtime.Registry');& \- T1 i. |5 |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 _2 u8 C% _& v8 DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 [9 P& }; ^4 w- X# W0 ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' M& i" H2 \5 X4 c( J; m; kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;& E6 [2 C, _0 b" P3 X# j, |7 U

4 i1 N8 D: q! \$ H& m/ p* b4 j/* create a logger instance */
3 @: s" ^- T& Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 k0 V, s* R& jvar loggerBufP = new LoggerBuf.Params();" j6 c! E, p5 B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 c4 S; H3 j) P& n$ q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% W0 V7 K  j7 v
- b+ l' K# S$ [  h9 Qvar appLogger = LoggerBuf.create(loggerBufP);
  V: K' c  x- E6 Y7 V& H! l7 K* MappLogger.instance.name = "AppLog_Core1";
! ?7 ]& Y- M# d# oDefaults.common$.logger = appLogger;4 I- u, N& H9 ~0 J  M+ y
Memory.defaultHeapSize = 0x8192;   
- T/ h, a1 Y! {9 A2 r$ MIdle.idleFxns[0] = "&LEDStatus";  }1 f* z/ {( o* k0 C
Cache.initSize.l2Size = Cache.L2Size_32K;
7 ~7 b; T+ W5 _% i# p' u0 Q* d6 N! U" U& ]
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 11:49 , Processed in 0.050176 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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