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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: F+ C( u! y( E* a, c
" Z7 r+ a- A0 l3 S4 f4 O4 P+ T( v1 o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! c8 K* C" j! n: \( b; B
1 X8 F' i' A. L+ d其他程序段。。。。。
* s) S" g  L4 n0 M$ b7 l
1 p: ^# q- r( b2 D4 m& Q9 b   free(x_d);! ?% f5 E" C$ {: l0 i
+ `4 P3 c$ [" ]- l2 R
使用DSP侧单独调试功能,验证动态申请没有问题,% n. @# P0 `, y4 c: e/ E' e& W8 v( {
' B( r$ k7 d  L
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  `8 R1 c3 J" }: n6 `' s

/ M1 L4 p/ J$ o  e8 J& F* N/ c) V' p) u% s8 I+ Z- X

& x1 H: W  t2 f) i3 Y) U4 Y$ ^0 ?
2 B' J& p) ~5 D1 n1 ~9 X4 R" m$ L( F$ |, U' l

% w" h! \9 |% O( G- t. t; I7 S: }8 {0 o

* }. [. @. M: {3 T$ T" ~7 [, {( x- G0 j& |. s7 Q- p
6 s+ [% u6 ?. T# O# a- I( g
分享到:  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 */
6 ]- M% D7 `7 }Program.heap = 0;. l8 U$ H( ~2 m& z: Q, b
Program.argSize = 100;  /* minimum size */
) n, a  K) n2 ]/ t) yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
! I! f# S) b) i2 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  K, t7 d8 h7 t% t
var heapMemParams = new HeapMem.Params();& j) y2 c9 ?# M  `) z9 X' r' q
heapMemParams.size = 0x4000;) t" o- X, h& |2 J( c: X

$ b6 y9 y6 ]) j1 [var Memory = xdc.useModule('xdc.runtime.Memory');' M. U+ x/ n& ]& |2 Y) Q+ n5 s# Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ e5 \+ y1 x2 G% G, P, j
& g* E/ W9 Z! Y
我大约calloc  每次共计大小为5K*16bits,
& F5 |6 E( Z" U% x) {而默认配置才0x4000、需要改大。
  S) F. i' q" @/ ^3 x4 @" ^6 X- Y, q& l' H' I; R
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
( ?% }! I& P5 o% v/ m% N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ h  i5 _7 a: Y9 {. ]- {$ b(不过疑惑的是,为何单独DSP仿真就没有问题呢?), V9 Z3 J8 ^7 q' M9 O
4 E- Y  c! B9 G3 o9 c  X# J
是不是需要在DSP.CFG中进行配置+ J7 s: _8 x, c3 g8 g
我现在的配置为& X# ^5 M) V+ U7 f$ ^: [9 Q  M

- g  l+ c7 ?4 ?/*+ u* A* z- i0 A4 U5 D; R) z% G
*  ======== Operating System Configuration ========" [9 R% V; U& \+ r+ a# x- D
*/
+ d7 o$ ]9 e9 c3 p# p0 i) O4 L+ O3 P$ q
/* no rts heap */
, O5 A+ v; J; g1 dProgram.heap = 0;
' }9 R) M0 U- L) e/ f* eProgram.argSize = 100;  /* minimum size */
2 ~7 z  D5 k+ H2 I4 `$ A- WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 X( J( I( {" O/ N4 {4 e6 C+ A1 [) f8 p
% f7 A' H# I! d) w+ h2 s/* create a default heap */
" T( l2 [& ]' s6 |* p$ @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# X: ]5 L) c, D6 G" l- g
var heapMemParams = new HeapMem.Params();4 c; f# p# {6 M. K5 t$ i
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' r# d$ x$ l+ T& v: `8 a

6 c. A& u2 i2 T, u6 y
var Memory = xdc.useModule('xdc.runtime.Memory');
1 U$ z3 d; n6 W  L, t. DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% T6 M3 w5 j8 G, n) o0 J5 Y' k, @" X
/* configure System module */* ^9 g0 G7 r% O+ J' D0 b" ]/ Z- s
var SysMin = xdc.useModule('xdc.runtime.SysMin');; K( b6 w8 H/ g& d% u9 X
SysMin.bufSize = 0x1000;
( M4 L1 g# [3 ?8 U) o, [, n! wSysMin.flushAtExit = false;
7 V7 V% e) I. V
" r2 u* \5 n: P  V5 xvar System = xdc.useModule('xdc.runtime.System');0 Y+ b: g% C0 w3 B
System.SupportProxy = SysMin;
$ C3 x$ \0 l4 [0 ^- L1 Z) t& K8 r
/* configure SysBios to use the lower half of Timer 1 */
' \1 y' |4 l! i, O" Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 @4 r0 f* A# {& Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 d: C. }5 w: M# t7 \, W& m. \Timer.timerSettings[1].master = true;
  ?3 a- p0 N# @6 A" ~" B0 a* Q' ?+ xTimer.defaultHalf = Timer.Half_LOWER;
" l# h( K+ I9 K% `. w) vClock.timerId = 1;* M; n8 a# ?$ a+ D

0 B+ D$ U/ ~* S/ @' X. R9 k, W) ?* [
/*
5 I2 y; Q3 S. O5 j3 g5 l  f/ g *  ======== Miscellaneous Configuration ========
. h# W3 j+ i! R# t$ t$ K( p */
3 T+ R7 g7 u" T3 r3 Q
7 [' N4 k7 D3 P' ]! B/* set default diags mask */1 F' |# p  ^0 c! J
var Diags = xdc.useModule('xdc.runtime.Diags');
0 ~1 E9 B: l  Y, ~7 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');; t3 n! ~1 F0 s/ L& s- A1 L& J3 d
) f8 t( P% z4 E( r9 U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# A6 t9 ~# ~3 q+ A; j# E
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" i" o" [- s* n: d; }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" M- i) j8 @0 n' w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 }7 I7 ?* I; z) j1 E0 f  U1 qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; W3 p2 C4 q9 |3 ]
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" \% o9 s) Q. M: f/ O. p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% ?: D+ V) _0 o$ V) \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% p7 D1 {# Y4 D9 o! d  ]. NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ Y. T+ M0 J% \4 n  V5 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* q; v/ t/ {. n9 @5 Y4 j* hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 N1 C- I  b" F: F0 t* L( @& kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( V' {- a( P; W; D) @* {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 N0 M# X% y9 y) B, Q& M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 L5 I9 {9 j5 y; w6 R
* P6 I: p( G: D, b$ S/ g
/* override diags mask for selected modules */
7 _4 C( V5 a/ Cxdc.useModule('xdc.runtime.Main');' g2 T- B& r  ?3 b3 U! _
Diags.setMaskMeta(% h. K* J1 [" l4 c
    "xdc.runtime.Main",, T8 q. y  G/ a* c6 T; O5 U3 |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. I" ~* {& i: n5 b* [9 x3 t' @    Diags.RUNTIME_ON; Y" v% S9 f3 H
);
. e% {; s4 K, d* |( H, A* L/ |8 ^! a1 w/ b- d
var Registry = xdc.useModule('xdc.runtime.Registry');% [2 \) v/ V/ S% t; f8 a  c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( g' T% w: I6 }6 V( ^2 f" F8 T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 l; o+ y3 y, m) _* v) ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: ~+ v# |$ z0 Q5 H% V& D8 CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, K* g4 T& q0 W

9 w. d4 G* N; B. V9 i. y/* create a logger instance */
/ N  m  P4 M& k/ `1 o2 K, Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ D' I2 c8 N4 K8 b. l* G
var loggerBufP = new LoggerBuf.Params();
3 q4 _  E/ q& k7 m- @loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 ^( `. h% l7 |+ Z; zloggerBufP.bufType = LoggerBuf.BufType_FIXED;( U& b4 Q9 i+ I

8 W+ L$ s7 t% Bvar appLogger = LoggerBuf.create(loggerBufP);* `# A1 b% p: S, ?
appLogger.instance.name = "AppLog_Core1";% p6 N, H& r3 ]+ W. e0 c! V
Defaults.common$.logger = appLogger;/ y6 m2 i( a$ ~
Memory.defaultHeapSize = 0x8192;    8 j1 x3 P; ]8 D# _
Idle.idleFxns[0] = "&LEDStatus";
" L8 ]# G# m$ p) a* _Cache.initSize.l2Size = Cache.L2Size_32K;
/ A9 n2 D& _. r8 G6 Q0 R
4 `7 W3 }' w- N) Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 11:43 , Processed in 0.044562 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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